废话少说,先看下面的图:
<a href="http://lancelot.blog.51cto.com/attachment/201006/21/393579_1277086856kCQk.png"></a>
<b>public</b> <b>static</b> Image getSWTImageFromSwing(ImageIcon imageIcon)
{
<b>if</b> (imageIcon.getImage() <b>instanceof</b> BufferedImage)
{
BufferedImage bufferedImage = (BufferedImage) imageIcon.getImage();
DirectColorModel colorModel = (DirectColorModel)bufferedImage.getColorModel();
PaletteData palette = <b>new</b> PaletteData(colorModel.getRedMask(), colorModel.getGreenMask(), colorModel.getBlueMask());
ImageData data = <b>new</b> ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette);
//设置每个像素点的颜色与Alpha值
<b>for</b> (<b>int</b> y = 0; y < data.height; y++) {
<b>for</b> (<b>int</b> x = 0; x &lt; data.width; x++) {
<b>int</b> rgb = bufferedImage.getRGB(x, y);
<b>int</b> pixel = palette.getPixel(<b>new</b> RGB((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF));
data.setPixel(x, y, pixel);
<b>if</b> (colorModel.hasAlpha()) {
data.setAlpha(x, y, (rgb &gt;&gt; 24) & 0xFF);
}
}
}
// 生成Image对象
Image swtImage = <b>new</b> Image(PlatformUI.getWorkbench().getDisplay(),
data);
<b>return</b> swtImage;
}
}
当我看到这个代码的时候,感觉简直太优美了,完全是根据颜色处理的规则来的,没有什么硬生生设置没有颜色的像素点颜色为白色的丑陋代码。转换的效果也非常完美,跟资源管理器里面的截图也是一模一样。早要是到SWT官方网站上看一眼多好。
我的运行环境是:Windows7、JRE1.6、Eclipse RCP 3.5。
本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/336448,如需转载请自行联系原作者