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

為武夷山等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及武夷山網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站設計、網(wǎng)站建設、外貿網(wǎng)站建設、武夷山網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
例如,我們想做一個類型于Windows的explorer的一個文件樹來顯示文件,希望每個樹結點的圖標和在explorer里看到的一樣。到現(xiàn)在為此我不知道怎么用SWT去得到每個文件或文件夾的顯示圖標。因此我要借助SWing來完成。
首先,我們需要得到一個對應于文件(夾)圖標的Swing Image對象。如下:
- java.awt.Image icon = ShellFolder.getShellFolder(file).getIcon(true);
接下來就是要從這個Swing Image開始做轉換。顯示不能直接把這個icon轉換成SWT的一個Image對象。所以我們需要先把這個icon變成字節(jié)流,假如我們希望轉換后圖標的大小是16*16。那么,可以如下做:
- 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存入一個字符數(shù)組轉出流。最后只要從這個輸出流中得到字節(jié)數(shù)組就可以:
- byte[] by = baos.toByteArray();
這樣就得到了這個Swing圖標對應的一個字節(jié)數(shù)組。
要從一個字節(jié)數(shù)組得到對應的一個SWT的圖標就比較簡單了,我們可以先用這個數(shù)組構造出一個ImageData對象,如下:
- 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);
- }
- }
- }
這里有一點要注意:在沒有圖元點的地方,默認會顯示一個黑點,我把顯示黑點的地方都用一個白點做了替換。最后,根據(jù)這個data構造出對應的Image,如下:
- image = new Image(Display.getDefault(), data);
分享名稱:淺析SwingImage的轉換
本文路徑:http://m.5511xx.com/article/cdiiphe.html


咨詢
建站咨詢
