2010-09-24 65 views
1

我有一個單獨的.png圖像,上面有多個圖標(帶有透明區域),並且想從中裁剪單個圖標。在Java ME中它很直接,但在黑莓中我還沒有找到相同的東西。該code here shows an example with a Bitmap,但是這樣做油漆的透明區域使用白色:如何在保留透明度的情況下在BlackBerry中裁剪.png EncodedImage

public Bitmap cropImage(Bitmap image, int x, int y, int width, int height) { 
    Bitmap result = new Bitmap(width, height); 
    Graphics g = new Graphics(result); 
    g.drawBitmap(0, 0, width, height, image, x, y); 
    return result; 
} 

我需要同樣的一個EncodedImage保持透明度,但Graphics構造函數只接受一個Bitmap。有沒有其他方法可以實現這一點?感謝您提供任何提示。

UPDATE:

,如果你省略了中間的圖形完全反對,並直接設置ARGB數據到新創建的位圖,像這樣透明度可保留:

public Bitmap cropImage(Bitmap image, int x, int y, int width, int height) { 
    Bitmap result = new Bitmap(width, height); 
    int[] argbData = new int[width * height]; 
    image.getARGB(argbData, 0, width, x, y, width, height); 
    result.setARGB(argbData, 0, width, 0, 0, width, height); 
    return result; 
} 
+0

顯然沒有辦法返回一個裁剪後的圖像(從大圖),同時保持透明度。我通過將圖形上下文傳遞到我的方法中,並從較大的圖像中直接將一個子集繪製到圖形上下文中來解決這個問題 - 這樣至少保留了透明度。 – Levon 2010-09-24 19:38:28

回答

1

對不起,我沒有嘗試這個代碼,但它應該給你的想法:

int[] argbData = new int[ width * height ]; 
image.getARGB(  argbData, 
        0, 
        width 
        x, 
        y, 
        width, 
        height); 

Bitmap result = new Bitmap(width, height); 
Graphics g = new Graphics(result); 
g.drawARGB(argbData , 0, width, 0, 0, width, height); 

return result; 
+0

謝謝你的代碼,但結果是完全相同的 - 它不保留透明度,並在透明區域應該繪製白色像素。就目前而言,我仍然沒有找到一種方法來從較大的圖像中裁剪圖像,同時保留透明部分。 – Levon 2010-09-24 18:54:05

+0

對不起,我忍不住,但你可以檢查這個http://supportforums.blackberry.com/t5/Java-Development/Transparent-background-for-Bitmap/mp/233113/message-uid/233113 – 2010-09-24 21:39:27

+2

而不是創建一個Graphics對象,你可以直接在新的Bitmap中做一個result.setARGB(...)嗎? – 2010-09-25 04:12:29

0

嘗試使用

g.setGlobalAlpha(0); 

g.drawBitmap(0, 0, width, height, image, x, y); 

,或者您可以使用

drawARGB(int[] data, int offset, int scanLength, int x, int y, int width, int height) 

其保存在目標圖像中的阿爾法。

+0

謝謝,但請您提供一個如何在drawARGB()中獲得int []數據的例子。謝謝! – Levon 2010-09-24 17:11:21

+0

另外,使用g.setGlobalAlpha(0)不起作用 - 它用純白色繪製整個區域。 – Levon 2010-09-24 17:41:13

相關問題