相关主题(尚无解决方案):访问 ARGB_8888 Android Bitmap 中的原始数据
简而言之:使用copyPixelFromBuffer
and时copyPixelsToBuffer
,Android 已经在 RGB 通道上应用了 Alpha 通道。
我需要将其转换为原始 ARGB 值,反之亦然。我不知道Android如何应用它。你能告诉我公式吗?
Android 以 alpha 预乘形式存储位图数据。换句话说,在复制数据时不应用 alpha 值,它一直都在应用。
要转换为预乘形式,请将颜色分量与归一化的 alpha 值相乘,如下所示:
redPremultiplied = red * normalizedAlpha
greenPremultiplied = green * normalizedAlpha
bluePremultiplied = blue * normalizedAlpha
alphaPremultiplied = alpha
在哪里
red = <value between 0 and 255>
green = <value between 0 and 255>
blue = <value between 0 and 255>
alpha = <value between 0 and 255>
normalizedAlpha = alpha / 255
要将预乘 alpha 转换为规范形式,请将预乘分量与归一化 alpha 相除:
red = redPremultiplied / normalizedAlpha
green = greenPremultiplied / normalizedAlpha
blue = bluePremultiplied / normalizedAlpha
alpha = alphaPremultiplied
但一定要注意 normalizedAlpha = 0!Bitmap.copyPixelsToBuffer()
您应该注意,尽管理论上处理的数据Bitmap.copyPixelsFromBuffer()
可以是任何格式。使用Bitmap.getPixels()
and更安全Bitmap.setPixels()
,因为 API 保证了这些函数处理的数据格式。特别是,您不必担心预乘和取消预乘 alpha,因为这些函数会为您处理。