2012-05-17 56 views
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模擬器..任何想法,爲什麼發生這種情況?

回答

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編碼器,爲我工作。搜索後,我發現這一個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!

+0

hi @Cool Dude,你可以在這種情況下幫我解決問題,我在OS 5中遇到了同樣的問題。我已經使用過你的代碼,但是透明而不是圖像。 –

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; 
}