天天看點

把Swing的Icon轉換到SWT的Image(續)

廢話少說,先看下面的圖:

<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 &lt; data.height; y++) {

           <b>for</b> (<b>int</b> x = 0; x &amp;lt; data.width; x++) {

              <b>int</b> rgb = bufferedImage.getRGB(x, y);

              <b>int</b> pixel = palette.getPixel(<b>new</b> RGB((rgb &gt;&gt; 16) &amp; 0xFF, (rgb &gt;&gt; 8) &amp; 0xFF, rgb &amp; 0xFF));

              data.setPixel(x, y, pixel);

              <b>if</b> (colorModel.hasAlpha()) {

                  data.setAlpha(x, y, (rgb &amp;gt;&amp;gt; 24) &amp; 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,如需轉載請自行聯系原作者

繼續閱讀