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

アルファチャンネルを完全に透明に設定してビットマップを作成するために使用したユーティリティ関数を次に示します。

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 に、エンコード時に png 画像から透明度を削除するバグがあることを最終的に発見しましたhttp://supportforums.blackberry.com/t5/Java-Development/Bug-in-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 に答える