在imageview上覆盖透明位图

时间:2013-07-22 19:31:52

标签: android bitmap transparency alpha image-editing

我正在制作一个图像编辑应用,用户可以触摸屏幕并在照片上贴上“贴纸”。

我的贴纸都有绿色背景(0,255,0),我想透明。但是,像素不是透明的,而是黑色的。

这是加载透明位图的代码:

private Bitmap transparentBitmap(int id)
{
    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
    bmOptions.inMutable = true;

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id, bmOptions);

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int[] pixels = new int[width * height];

    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

    for (int y = 0; y < height; y++)
    {
        for (int x = 0; x < width; x++)
        {
            int index = y * width + x;

            if (pixels[index] == Color.GREEN)
            {
                pixels[index] = Color.argb(0, 0, 0, 0);
            }
        }
    }

    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

    return bitmap;
}

我在应用程序的开头加载了所有贴纸,当用户触摸屏幕某处时,图形将从我的Assets类中的静态位图复制:

private Bitmap getGFX(stickerTypes type)
{
    switch(type)
    {
    case sweatDrop: return Assets.sweatDrop_GFX.copy(Config.ARGB_4444, true);
    case veins: return Assets.veins_GFX.copy(Config.ARGB_4444, true);
    default: return null; 
    }
}

就像我说的那样,我的实际贴纸并没有显示透明背景,而是带有黑色背景。他们被保存为.pngs。

我能想到的唯一解释是贴纸的背景像素相对于活动背景设置为透明而不是用户图片的背景,但这没有多大意义,因为活动的背景是橙色,而不是黑色。

2 个答案:

答案 0 :(得分:0)

只需使用paint创建像素并更改属性“set Alpha”以使其透明

希望它会奏效!

答案 1 :(得分:0)

目前您正在使用

Colors.argb(...)中的alpha分量设置为零
pixels[index] = Color.argb(0, 0, 0, 0);

相反,将其设置为max alpha:

pixels[index] = Color.argb(255, 0, 0, 0);