2

相关主题(尚无解决方案):访问 ARGB_8888 Android Bitmap 中的原始数据

简而言之:使用copyPixelFromBufferand时copyPixelsToBuffer,Android 已经在 RGB 通道上应用了 Alpha 通道。

我需要将其转换为原始 ARGB 值,反之亦然。我不知道Android如何应用它。你能告诉我公式吗?

4

1 回答 1

2

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,因为这些函数会为您处理。

于 2012-09-07T12:34:04.607 回答