把Swing的Icon转换到SWT的Image
在网上找了半天的资料,发现没有现成的API可以一句话就完成转换,都是需要写一段代码来完成。有几个方案,基本思路都是将Icon对象内所包含的Icon数据转换成数据流,然后根据这个数据流重新生成Image,其代码如下:
@Overridepublic Image getImage(Object element) {// 得到文件图标ImageIcon systemIcon = (ImageIcon) FileSystemView.getFileSystemView().getSystemIcon((File) element);java.awt.Image image = systemIcon.getImage();int width = image.getWidth(null);int height = image.getHeight(null);// 创建用于绘制Icon的缓冲区BufferedImage bufferedImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 绘制Icon到缓冲区Graphics2D g2d = bufferedImage.createGraphics();g2d.drawImage(image, 0, 0, null);g2d.dispose();// 读取缓冲区图片数据到一个数组int[] data = ((DataBufferInt) bufferedImage.getData().getDataBuffer()).getData();// 根据数组数据生成ImageData对象ImageData imageData = new ImageData(width, height, 24, new PaletteData(0xFF0000, 0x00FF00, 0x0000FF));imageData.setPixels(0, 0, data.length, data, 0);// 生成Image对象Image swtImage = new Image(PlatformUI.getWorkbench().getDisplay(),imageData);return swtImage;}
@Overridepublic Image getImage(Object element){//得到文件图标ImageIcon systemIcon = (ImageIcon) FileSystemView.getFileSystemView().getSystemIcon((File) element);java.awt.Image image = systemIcon.getImage();int width = image.getWidth(null);int height = image.getHeight(null);//创建用于绘制Icon的缓冲区BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//绘制Icon到缓冲区Graphics2D g2d = bufferedImage.createGraphics();g2d.drawImage(image, 0, 0, null);g2d.dispose();//读取缓冲区图片数据到一个数组int[] data = ((DataBufferInt) bufferedImage.getData().getDataBuffer()).getData();//将没有颜色的点设置为白色for (int i = 0; i < data.length; i++){if (data[i] == 0)data[i] = 0xFFFFFF;}//根据数组数据生成ImageData对象ImageData imageData = new ImageData(width, height, 24, new PaletteData(0xFF0000, 0x00FF00, 0x0000FF));imageData.setPixels(0, 0, data.length, data, 0);//生成Image对象Image swtImage = new Image(PlatformUI.getWorkbench().getDisplay(), imageData);return swtImage;}
@Overridepublic Image getImage(Object element){//得到文件图标ImageIcon systemIcon = (ImageIcon) FileSystemView.getFileSystemView().getSystemIcon((File) element);java.awt.Image image = systemIcon.getImage();int width = image.getWidth(null);int height = image.getHeight(null);//得到Icon的数据缓冲区BufferedImage bufferedImage = (BufferedImage) systemIcon.getImage();//读取缓冲区图片数据到一个数组int[] data = ((DataBufferInt) bufferedImage.getData().getDataBuffer()).getData();//将没有颜色的点设置为白色for (int i = 0; i < data.length; i++){if (data[i] == 0)data[i] = 0xFFFFFF;}//根据数组数据生成ImageData对象ImageData imageData = new ImageData(width, height, 24, new PaletteData(0xFF0000, 0x00FF00, 0x0000FF));imageData.setPixels(0, 0, data.length, data, 0);//生成Image对象Image swtImage = new Image(PlatformUI.getWorkbench().getDisplay(), imageData);return swtImage;}
public static Image getSWTImageFromSwing(Display display, File file){//得到文件图标ImageIcon imageIcon = (ImageIcon) FileSystemView.getFileSystemView().getSystemIcon(file);if (imageIcon.getImage() instanceof BufferedImage) {BufferedImage bufferedImage = (BufferedImage) imageIcon.getImage();DirectColorModel colorModel = (DirectColorModel) bufferedImage.getColorModel();PaletteData palette = new PaletteData(colorModel.getRedMask(), colorModel.getGreenMask(), colorModel.getBlueMask());ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette);//设置每个像素点的颜色与Alpha值for (int y = 0; y < data.height; y++) {for (int x = 0; x < data.width; x++) {int rgb = bufferedImage.getRGB(x, y);int pixel = palette.getPixel(new RGB((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF));data.setPixel(x, y, pixel);if (colorModel.hasAlpha()) {data.setAlpha(x, y, (rgb >> 24) & 0xFF);}}}// 生成Image对象Image swtImage = new Image(display, data);return swtImage;} else return null;}
转载自:http://lancelot.blog.51cto.com/393579/331636 和 http://lancelot.blog.51cto.com/393579/336448。
把Swing的Icon转换到SWT的Image相关推荐
- JavaGUI编程 -- Swing之Icon、ImageIcon标签获取当前类同一级文件路径的资源
1. Swing之Icon.ImageIcon标签&获取当前类同一级文件路径的资源 1.1 Icon标签 这个是使用画笔画自己心怡的图标 示例: package GUI.Swing;impor ...
- AWT/SWT/SWING 区别和联系
1.AWT和Swing由JAVA开发,符合JAVA的跨平台原则,理念上更加支持移植: 2.SWT由IBM资助的eclipse团队开发,采用较为实用的用户体验原则,界面与各个操作系统平台更加接近: 3. ...
- 将JavaFX 2.0与Swing和SWT集成
JavaFX 2.0对JavaFX的改进之一是可以更轻松地与Swing和SWT进行互操作 . 一些在线资源记录了如何完成此操作. 其中包括将JavaFX集成到Swing应用程序和SWT Interop ...
- SWT行 AWT/Swing也行系列 1 -实现半透明及不规则窗体
对于Java来说,GUI开发一直都是项比较头疼的事情.从AWT的功能奇缺,到Swing的臃肿不堪,往如梦魇般困扰着Java开发人员. 于是,有一群人开始走向了邪路-- 这群误入岐途的人(至少Sun是这 ...
- java图形化界面编程之Swing
三. Swing 编程 3.1 Swing概述 前一章己经介绍过AWT和Swing 的关系 , 因此不难知道 : 实际使用 Java 开发图形界面程序时 ,很少使用 AWT 组件,绝大部分时候都是 ...
- 【java毕业设计】基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)——连连看游戏
基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+GUI的连连看游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...
- java开发之图形界面GUI初步-Swing几种常用组件及其应用
package test; import java.awt.*; import java.awt.event.KeyEvent; import javax.swing.*; /* * 作者:钟志钢 * ...
- java swing 例子(一些)
码码: package swing1;import javax.swing.JFrame; import javax.swing.WindowConstants; public class Empty ...
- Swing的设计是MVC的典范
无论你的项目是否用到了Swing技术,我都要说,Swing是一个设计优秀的Java包,它充满了大师的智慧.假设你学了Java却连一个Button还不会写,就象你学习Visual Basic却不会用Bu ...
最新文章
- css rem 大屏开发_px和em、rem单元如何选择?
- pandas dataframe column_Python数据分析——Pandas 教程(下)
- 面状县级行政区划转地级行政区划,并关联属性字段
- MyBatis 源码分析系列文章导读
- explode() 字符串转换数组
- Android JNI_OnLoad()函数
- 数学狂想曲(十一)——高阶统计, 最速降线, 泛函 变分
- Insus Binary Utility
- 通过百度 vs 奇虎,来谈博客搜索
- [AtCoder Educational DP Contest] J - Sushi(期望dp)
- JAVA多线程和并发基础面试问答(转载)
- 关于tomcat内路径跳转的一些思考
- 引入外部js如何通知页面其编码格式
- 1024程序员的节日~
- TensorFlow中数据读取—如何载入样本
- SCPPO(十一):网站发布中的问题锦集—ReportViewer版本问题
- 【hiho】127 后缀自动机一·基本概念 【后缀自动机】
- 电脑cpu温度过高怎么办_解决电脑主板CPU温度过高,COC机箱提升电脑健康指数
- Atitit 常见项目角色与职责 目录 1.1. 常见项目角色与职责	1 1.2. 解决问题思路:一般百度,问同事,问上一级	1 1.3. 解决问题时限:与跳过法	1 1.4. 解决方法,一般实
- LabVIEW编程LabVIEW控制Keithley 2400例程与相关资料