android 像素处理,android-无法透明位图图像的像素

作者分享了在处理位图中洋红色透明像素时遇到的问题,尝试改变像素透明度导致颜色变黑。探讨了可能的原因,如Alpha通道缺失,并尝试了使用Paint和PorterDuff模式但效果不佳。寻求解决透明度调整正确方法的建议。
摘要由CSDN通过智能技术生成

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

我从SD卡加载位图:

Bitmap bitmap = BitmapFactory.decodeFile(myImagePath);

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

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

然后逐像素进行扫描,以找到洋红色的像素,并尝试更改其透明度.

for(int x=0;x

for(int y=0;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通道,我应该先设置/定义它吗?如果是,如何?

编辑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

for(int y=0;y

if(bitmap.getPixel(x, y)==Color.rgb(0xff, 0x00, 0xff))

{

bitmap.setPixel(x, y,Color.TRANSPARENT);

}

}

}

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

有人有什么主意吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值