`
liugang594
  • 浏览: 978103 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

把Swing Image转换成SWT Image

阅读更多

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

 

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

 

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

 

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

 

 

接下来就是要从这个Swing的Image开始做转换。显示不能直接把这个icon转换成SWT的一个Image对象。所以我们需要先把这个icon变成字节流,假如我们希望转换后图标的大小是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存入一个字符数组转出流。最后只要从这个输出流中得到字节数组就可以:

 

byte[] by = baos.toByteArray();

 

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

 

要从一个字节数组得到对应的一个SWT的图标就比较简单了,我们可以先用这个数组构造出一个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);
		}
	}
}

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

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

 

最后效果图如下。其中为了更清楚的看到,我把图标的大小设成了32*32。

 

  • 大小: 30 KB
分享到:
评论
2 楼 yhyysxqygs 2012-06-01  
大哥,你还可以参考http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet156.java?view=co,里面有转换的哦。
1 楼 ygswine 2012-04-28  
java.awt.Image icon = ShellFolder.getShellFolder(file).getIcon(true); 
    ShellFolder 在JDK60 中无法使用 , 查询过网站 说是sun公司的一个bug  , 请问楼主是怎么调用这个ShellFolder类的.?? 

相关推荐

    开发项目用SWING与RCP与SWT.JFACE的分析

    开发项目用SWING与RCP与SWT.JFACE的分析 第一个SWT程序 下面让我们开始一个SWT程序。(注意:以下的例子和说明主要针对Windows平台,其它的操作系统应该大同小异)。首先要在Eclipse安装文件中找到SWT包,Eclipse...

    Eclipse_Swt_Jface_核心应用_部分19

    1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 Swing与SWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWT与JFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2...

    java课程设计论文个人通讯录管理系统.doc

    目 录 一、开发背景……………………………………………………………………….1 二、可行分析………………………………………………... // 获得图片的URL Image image=new ImageIcon(url).getImage(); // 创建图像对

    JAVA上百实例源码以及开源项目

    有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以改进做成小工具。 Java右键弹出...

    JAVA上百实例源码以及开源项目源代码

    有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以改进做成小工具。 Java右键弹出...

    java源码包---java 源码 大量 实例

    有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以改进做成小工具。 Java右键弹出...

    java源码包2

    有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以改进做成小工具。 Java右键弹出...

    java源码包3

    有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以改进做成小工具。 Java右键弹出...

    java源码包4

    有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以改进做成小工具。 Java右键弹出...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰效果 Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰效果 Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、...

Global site tag (gtag.js) - Google Analytics