我正在尝试使用以下代码在黑莓上创建一个透明背景的位图。
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模拟器..任何想法为什么会发生这种情况?
答案 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 !!