亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Swing swt image 圖標轉換

系統 1836 0

我覺得這種轉換當然可能很少會用到,不過了解一下也是沒有壞處的。

?

例如,我們想做一個類型于Windows的explorer的一個文件樹來顯示文件,希望每個樹結點的圖標和在explorer里看到的一樣。到現在為此我不知道怎么用SWT去得到每個文件或文件夾的顯示圖標。因此我要借助SWing來完成。

?

首先,我們需要得到一個對應于文件(夾)圖標的Swing的Image對象。如下:

?

Java代碼 復制代碼
  1. java.awt.Image?icon?=?ShellFolder.getShellFolder(file).getIcon( true );??
    java.awt.Image icon = ShellFolder.getShellFolder(file).getIcon(true);

  

?

?

接下來就是要從這個Swing的Image開始做轉換。顯示不能直接把這個icon轉換成SWT的一個Image對象。所以我們需要先把這個icon變成字節流,假如我們希望轉換后圖標的大小是16*16。那么,可以如下做:

?

Java代碼 復制代碼
  1. int ?width?=? 16 ; ??
  2. int ?height?=? 16 ; ??
  3. BufferedImage?b?=? new ?BufferedImage(width,?height, ??
  4. ????????BufferedImage.TYPE_INT_RGB); ??
  5. Graphics?graphics?=?b.getGraphics(); ??
  6. graphics.drawImage(icon,? 0 ,? 0 ,?width,?height,? null ); ??
  7. ByteArrayOutputStream?baos?=? new ?ByteArrayOutputStream(); ??
  8. ImageIO.write(b,? "png" ,?baos);??
    				int width = 16;
				int height = 16;
				BufferedImage b = new BufferedImage(width, height,
						BufferedImage.TYPE_INT_RGB);
				Graphics graphics = b.getGraphics();
				graphics.drawImage(icon, 0, 0, width, height, null);
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				ImageIO.write(b, "png", baos);
  

?

?

先轉成一個BufferedImage,然后把這個BufferedImage存入一個字符數組轉出流。最后只要從這個輸出流中得到字節數組就可以:

?

Java代碼 復制代碼
  1. byte []?by?=?baos.toByteArray();??
    byte[] by = baos.toByteArray();
  

?

這樣就得到了這個Swing圖標對應的一個字節數組。

?

要從一個字節數組得到對應的一個SWT的圖標就比較簡單了,我們可以先用這個數組構造出一個ImageData對象,如下:

Java代碼 復制代碼
  1. ImageData?data?=? new ?ImageData( new ?ByteArrayInputStream(by)); ??
  2. for ?( int ?i?=? 0 ;?i?<?width;?i++)?{ ??
  3. ???? for ?( int ?j?=? 0 ;?j?<?height;?j++)?{ ??
  4. ???????? if ?(data.getPixel(i,?j)?==? 0 )?{ ??
  5. ????????????data.setPixel(i,?j,? 0xffffff ); ??
  6. ????????} ??
  7. ????} ??
  8. }??
    ImageData data = new ImageData(new ByteArrayInputStream(by));
for (int i = 0; i < width; i++) {
	for (int j = 0; j < height; j++) {
		if (data.getPixel(i, j) == 0) {
			data.setPixel(i, j, 0xffffff);
		}
	}
}
  

?這里有一點要注意:在沒有圖元點的地方,默認會顯示一個黑點,我把顯示黑點的地方都用一個白點做了替換。最后,根據這個data構造出對應的Image,如下:

Java代碼 復制代碼
  1. image?=? new ?Image(Display.getDefault(),?data);??
    image = new Image(Display.getDefault(), data);
  

?

最后效果圖如下。其中為了更清楚的看到,我把圖標的大小設成了32*32。

Swing swt image 圖標轉換


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 手机看片福利盒子久久青 | 久热最新视频 | 亚洲日韩精品欧美一区二区 | 香蕉青草久久成人网 | 9久热| 四虎影视成人永久在线观看 | 精品精品国产高清a毛片 | 欧美日韩精品一区二区三区四区 | 曰本一区二区 | 色悠综合 | 久久午夜伦理 | 特级毛片在线播放 | 国产精品人成在线播放新网站 | 视频在线一区二区 | 日本在线高清不卡 | 日韩视频在线观看一区二区 | 免费看在线爱爱小视频 | 猫咪www免费人成在线观看网址 | 中文精品99久久国产 | 神马影院伦理我不卡 | 欧美很很干 | 大陆老太xxxxxxxxhd | 色综合久久久高清综合久久久 | 日韩亚洲一区中文字幕 | 成人看免费一级毛片 | 99久久亚洲国产高清观看 | 国产资源站 | se成人国产精品 | 国产亚洲美女精品久久久2020 | 国产精品成人四虎免费视频 | 久久午夜青青草原影院 | 久草久| 91精品国产福利尤物 | 一区二区三区欧美日韩国产 | 婷婷在线视频观看 | 日本一区二区三区四区五区 | 国产精品天堂 | 99热国内精品| 深夜影院老司机69影院 | 99在线观看 | 亚洲精品久久久成人 |