无法在黑莓上创建具有透明背景的位图

时间:2012-05-17 17:40:58

标签: blackberry

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

       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模拟器..任何想法为什么会发生这种情况?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

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