admin 管理员组文章数量: 887021
android 像素处理,android
我正在使用位图图像,其透明部分用洋红色着色(在某些语言中,可以将颜色设置为透明).我尝试对原始位图图像中的洋红色透明像素进行处理.
我从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会导致整个位图透明或使目标像素变黑:
有人有什么主意吗?
本文标签: android 像素处理 Android
版权声明:本文标题:android 像素处理,android 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1700358667h412334.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论