Android BitmapFactory从ARGB png中修剪颜色值



我有一个包含alpha值的图像。一些像素的透明度为0,这意味着它们是完全透明的,其他像素的透明度在0到255之间。尽管像素的透明度为0,但它仍然包含有效的RGB值,我想使用bitmap.getPixel(x,y(方法访问这些值。

问题是:加载的位图将丢失所有RGB值(它们设置为0(,其中alpha(A(值为0。

这就是我加载位图的方式:

val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.ARGB_8888
}
originalImage = BitmapFactory.decodeResource(context.resources, R.drawable.img, options)
originalImage.setHasAlpha(true)

如果我在Gimp等程序中打开同一张图像,并在同一像素上使用颜色选择器,即使在alpha为0的像素中,我也会得到所有有效的RGB值。

只有透明度为0的像素会受到影响,其他像素会保留其RGB值。

是什么原因造成的,如何解决?

由于Android系统内部默认将位图图像处理为预乘位图,因此在解码时,所有像素(以非预乘格式存储在文件中(都会转换为预乘像素。因此,RGB值变为0,其中A为0。如果您想将位图保持为非预乘格式,只需指定BitmapFactory.Options.inPremultiplied=false.

val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.ARGB_8888
inPremultiplied = false
}
originalImage = BitmapFactory.decodeResource(context.resources, R.drawable.img, options)
originalImage.setHasAlpha(true)

最新更新