gpt4 book ai didi

android - 无法透明位图图像的像素

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:54 25 4
gpt4 key购买 nike

我正在处理其透明部分以洋红色着色的位图图像(在某些语言中可以将颜色设置为透明)。我尝试透明化原始位图中洋红色的像素。

我从 SD 卡加载位图:

            Bitmap bitmap = BitmapFactory.decodeFile(myImagePath);

将其复制到另一个位图以使其可变:

            Bitmap bitmap2 = bitmap.copy(Bitmap.Config.ARGB_8888,true);

然后逐个像素地扫描它以找到品红色的像素并尝试更改它们的透明度。

            for(int x=0;x<bitmap2.getWidth();x++){
for(int y=0;y<bitmap2.getHeight();y++){
if(bitmap2.getPixel(x, y)==Color.rgb(0xff, 0x00, 0xff))
{
int alpha = 0x00;
bitmap2.setPixel(x, y , Color.argb(alpha,0xff,0xff,0xff)); // changing the transparency of pixel(x,y)
}
}
}

但是我希望变得透明的那些像素被转换为黑色。通过更改 alpha,我发现最终颜色从 argb() 中提到的颜色(未提及 alpha)变为黑色。例如,Color.argb(0xff,0xff,0xff,0xff) 变成白色,Color.argb(0x80,0xff,0xff,0xff) 变成灰色, Color.argb(0x00,0xff,0xff,0xff) 变黑。

我不明白哪里出了问题。

有没有可能没有 alpha channel ,我应该先设置/定义它?如果是,怎么办?

编辑1:

根据 Der Gol...lum 的评论,我修改了我的代码:

    Paint mPaint = new Paint();
mPaint.setAlpha(0);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
mPaint.setAntiAlias(true);

Bitmap bitmap = BitmapFactory.decodeFile(myBackImagePath).copy(Bitmap.Config.ARGB_8888 , true);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bitmap, 0, 0, mPaint);

if(bitmap.getPixel(0, 0)==Color.rgb(0xff, 0x00, 0xff))
{
for(int x=0;x<bitmap.getWidth();x++){
for(int y=0;y<bitmap.getHeight();y++){
if(bitmap.getPixel(x, y)==Color.rgb(0xff, 0x00, 0xff))
{
bitmap.setPixel(x, y,Color.TRANSPARENT);
}
}
}

但结果大致相同。使用不同的 PorterDuffModes 会导致整个位图透明或使目标像素变黑:

有人知道吗?

最佳答案

我终于找到问题所在了。我的 png 图像没有 alpha channel ,或者它们的 alpha channel 未激活。我为解决这个问题所做的是添加:

         bitmap.setHasAlpha(true); 

它按我的预期工作。

关于android - 无法透明位图图像的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31721453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com