Swing swt image 图标转换

系统 1451 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条评论