浅析Swing Image的转换
创始人
2024-04-17 04:31:39
0

我觉得这种Swing Image转换当然可能很少会用到,不过了解一下也是没有坏处的。

例如,我们想做一个类型于Windows的explorer的一个文件树来显示文件,希望每个树结点的图标和在explorer里看到的一样。到现在为此我不知道怎么用SWT去得到每个文件或文件夹的显示图标。因此我要借助SWing来完成。

首先,我们需要得到一个对应于文件(夹)图标的Swing Image对象。如下:

  1. java.awt.Image icon = ShellFolder.getShellFolder(file).getIcon(true);   

接下来就是要从这个Swing Image开始做转换。显示不能直接把这个icon转换成SWT的一个Image对象。所以我们需要先把这个icon变成字节流,假如我们希望转换后图标的大小是16*16。那么,可以如下做:

  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);   

先转成一个BufferedImage,然后把这个BufferedImage存入一个字符数组转出流。最后只要从这个输出流中得到字节数组就可以:

  1. byte[] by = baos.toByteArray();  

这样就得到了这个Swing图标对应的一个字节数组。

要从一个字节数组得到对应的一个SWT的图标就比较简单了,我们可以先用这个数组构造出一个ImageData对象,如下:

  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. }   

这里有一点要注意:在没有图元点的地方,默认会显示一个黑点,我把显示黑点的地方都用一个白点做了替换。最后,根据这个data构造出对应的Image,如下:

  1. image = new Image(Display.getDefault(), data); 

【编辑推荐】

  1. Swing应用程序处理函数
  2. 浅谈SwingWorker的使用
  3. AWT,SWT和Swing的布局管理器与Look And Feel机制
  4. 概述SWT采用AWT和Swing的一些优点
  5. Swing组件的paint方法的处理流程

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...