如何在BlackBerry中裁剪.png EncodedImage,同时保留透明度

时间:2010-09-24 16:39:43

标签: blackberry

我有一个单独的.png图像,上面有几个图标(带有透明区域),并希望从中裁剪单个图标。在Java ME中它是相当简单的,但在BlackBerry我没有找到一个等价物。 code here shows an example with a Bitmap,但这样做会使用白色绘制透明区域:

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。有没有其他方法可以实现这一目标?感谢您的任何提示。

更新:

如果省略中间的Graphics对象,并且将ARGB数据直接设置为新创建的Bitmap,则可以保留透明度,如下所示:

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

2 个答案:

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

答案 1 :(得分: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) 

保留目标图像中的alpha。