`
liugang594
  • 浏览: 987595 次
  • 性别: 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 实现系统托盘

    在Java的Swing库中,实现系统托盘功能可以为应用程序提供一个持续的交互界面,即使主窗口已经最小化或关闭。系统托盘,也称为通知区域或系统通知区,通常位于操作系统任务栏的右侧,允许用户快速访问常用的功能或...

    java swt自定义控件

    SWT使用JNI(Java Native Interface)来实现这一目标,它允许Java代码直接调用操作系统提供的API,从而避免了Java AWT和Swing中的“重量级”组件带来的性能问题。 ### 2. 自定义控件的基础 在SWT中,自定义控件通常...

    SWT扩展

    SWT设计的目标是提供一个高效、可定制且功能丰富的用户界面工具包,与传统的Java Swing库相比,SWT更接近于本地应用程序的外观和感觉。在本文中,我们将深入探讨SWT的扩展特性和实际应用。 首先,SWT的核心优势在于...

    swt 监控代码资料

    5. 图像处理:SWT支持加载和显示图片,可以使用Image和ImageData类来处理。这些类提供了从文件、流或数据数组加载图片的方法,并可以对图片进行缩放、裁剪等操作。 6. 监控与调试:在“swt 监控代码资料”中,监控...

    java swt 隐藏和显示任务栏图标和托盘图标(2)

    在Java编程环境中,SWT(Standard Widget Toolkit)是一个强大的库,用于创建本地化的图形用户界面(GUI)。SWT是Eclipse项目的一部分,它允许开发者利用操作系统原生的UI控件,提供更接近操作系统风格的用户体验。...

    SWT.zip 图形化

    10. **绘图与图像处理**:SWT的`GC`类提供低级别的绘图功能,包括绘制线条、形状、文本和位图,而`Image`类则用于加载和显示图像。 综上所述,SWT是一个强大的GUI工具包,结合JFace和其他Eclipse相关组件,为Java...

    第6章 SWT概述

    5. **org.eclipse.swt.graphics**: 提供了图形相关的API,如Image类用于处理图像,以及处理字体和颜色等。 6. **org.eclipse.swt.ole.win32**: 为Windows平台提供了OLE(Object Linking and Embedding)支持,允许在...

    SWT 各种小示例集中

    与Java Swing不同,SWT利用本地操作系统的能力,提供更接近操作系统风格的界面。 本压缩包“SWT 各种小示例集中”显然是一个包含多种SWT控件和JFace技术的示例集合。JFace是基于SWT的一个高级UI框架,简化了开发...

    java SWT编写的截图程序

    它由Eclipse基金会维护,与AWT和Swing不同,SWT直接与操作系统API交互,提供更原生的外观和性能。在这个场景中,我们讨论的是一个基于SWT编写的截图程序,其功能和使用方式类似于我们常见的QQ截图工具。 **SWT截图...

    SWT.rar_SWT

    SWT的设计目标是提供一个高效、本地化的GUI API,与Java的Abstract Window Toolkit (AWT) 和Swing不同,SWT直接与操作系统底层交互,提供了更接近原生应用的性能和外观。 在给定的"SWT.rar"压缩包中,我们可以看到...

    SWT API JAVA

    与Java Swing不同,SWT利用本地操作系统的能力,因此它能更好地融入操作系统环境,提供更好的性能和更接近原生应用的用户体验。 SWT API文档是开发者在使用SWT进行GUI编程时的重要参考资料。这个文档详细地列出了...

    学习SWT,RCP的笔记.doc

    - **性能**: 相较于AWT/Swing等其他Java GUI框架,SWT能够提供更流畅的响应速度。 - **资源消耗**: SWT通常消耗较少的系统资源。 #### 三、JFace介绍 JFace是建立在SWT基础上的一套更高层次的UI库,它主要关注于...

    基于SWT的枪战游戏(主要是Canvas)

    SWT的设计目标是提供一个比Java AWT和Swing更快、更接近操作系统原生界面的库。它通过直接调用操作系统API来实现组件,使得应用程序具有更好的性能和响应速度。 Canvas是SWT中的一个重要组件,它是一个空白画布,...

    java程序设计之swt教程

    1. SWT基础:SWT是Java AWT和Swing之外的一个选择,它通过JNI(Java Native Interface)直接与操作系统交互,提供更高效的性能。SWT控件与各种操作系统平台的原生控件相匹配,因此在不同平台上运行时,界面看起来和...

    Eclipse下SWT图形界面开发指南(2)

    - [Plug a Swing-based development tool into Eclipse](#):如何将基于Swing的工具集成到Eclipse中。 #### 关于作者 Adrian Van Emmenis是一位独立顾问,专注于Java技术领域的研究与开发。他以其丰富的经验和深厚...

    Java跳棋(基于SWT).zip

    与AWT(Abstract Window Toolkit)和Swing不同,SWT直接与操作系统进行交互,因此在性能和用户体验上具有优势。在Java跳棋应用中,SWT被用来构建游戏界面,包括棋盘、棋子图像、按钮、菜单等元素。 构建Java跳棋...

    swt英文版API,绝对能用

    SWT的设计目标是提供比Java AWT和Swing更快的性能,同时提供与操作系统更紧密的集成。 标题提到的“swt英文版API”是指SWT库的官方文档,这对于开发者来说是非常宝贵的资源。API(Application Programming ...

    基于java的跳棋(基于SWT).zip

    SWT相比Swing,性能更优,因为它是直接调用操作系统API,减少了中间层的开销。但同时,SWT的API学习曲线较陡峭,对不同操作系统的兼容性也有一定挑战。开发者需要熟悉各个平台下的控件行为差异,以便编写跨平台兼容...

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

Global site tag (gtag.js) - Google Analytics