1

我正在尝试使用以下代码在黑莓上创建具有透明背景的位图。

       Bitmap bmp2 = new Bitmap(Bitmap.ROWWISE_16BIT_COLOR,w, h);
       bmp2.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
       bmp2.setARGB(new int[w*h], 0, w, 0, 0, w, h);
       Graphics g3 = Graphics.create(bmp2); 
       int orig = g3.getGlobalAlpha();
       g3.setGlobalAlpha(0);
       g3.setBackgroundColor(0x00ffffff);
       g3.clear();
       g3.setGlobalAlpha(orig);
       g3.setColor(Color.BLACK);
       g3.setFont(myFont);
       g3.drawText(sig.getText(),0,0);

但我的图像总是有白色填充背景?关于我做错了什么的任何指示?谢谢

编辑 我刚刚意识到上面的代码适用于 os6+ 模拟器,但不适用于 OS5 模拟器。任何想法为什么会发生这种情况?

4

2 回答 2

3

这是我用来创建 alpha 通道设置为完全透明的位图的实用程序函数:

public static Bitmap createTransparentAlphaedBitmap(int width, int height) 
{
    Bitmap bitmap = new Bitmap(width, height);
    bitmap.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);

    int[] data = new int[width * height];
    Arrays.fill(data, 0);
    bitmap.setARGB(data, 0, width, 0, 0, width, height);

    return bitmap;
}
于 2012-05-17T17:50:50.207 回答
0

在互联网上搜寻解决方案后,我终于发现 BB OS5 SDK 中存在一个错误,该错误会在编码http://supportforums.blackberry.com/t5/Java-Development/Bug-in-PNG-时从 png 图像中删除透明度- Encoding-Bitmap-to-PNG-with-transparency/td-p/208614,所以我不得不寻找适合我的 png 编码器。搜索后我发现了这个http://code.google.com/p/qrcoder/source/browse/blackberry/src/th/co/yellowpages/javame/PNGEncoder.java?r=ae0257b8aa​​d8c231d80cf34a244e402b3fecee22它对我来说完美无缺。我是这样用的。

       Bitmap bmp2 = new Bitmap(Bitmap.ROWWISE_16BIT_COLOR,w, h);
       bmp2.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
       int[] d = new int[w*h];
       Graphics g3 = Graphics.create(bmp2);
       g3.setGlobalAlpha(0);
       g3.setBackgroundColor(16777215); g3.clear();   
       g3.setGlobalAlpha(255);
       g3.setFont(myFont);
       g3.drawText(sig.getText(),0,0);     
       bmp2.getARGB(d, 0, w, 0, 0, w, h);
       encBytes = PNGEncoder.toPNG(w, h, d, true);

我刚刚将encBytes写入一个文件,我得到了完美的透明 PNG!

于 2012-05-21T10:10:01.233 回答