使用copyPixelsToBuffer时Android如何应用alpha通道?

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

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

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

Android以alpha预乘forms存储位图数据。 换句话说,复制数据时不应用alpha值,它一直被应用。

要转换为预乘forms,请将颜色分量与规范化的alpha值相乘,如下所示:

 redPremultiplied = red * normalizedAlpha greenPremultiplied = green * normalizedAlpha bluePremultiplied = blue * normalizedAlpha alphaPremultiplied = alpha 

哪里

 red =  green =  blue =  alpha =  normalizedAlpha = alpha / 255 

要将预乘alpha转换为规范forms,请将预乘组件与规范化alpha分开:

 red = redPremultiplied / normalizedAlpha green = greenPremultiplied / normalizedAlpha blue = bluePremultiplied / normalizedAlpha alpha = alphaPremultiplied 

但一定要注意normalizedAlpha = 0! 您应该注意, Bitmap.copyPixelsToBuffer()Bitmap.copyPixelsFromBuffer()处理的数据可以是任何格式。 使用Bitmap.getPixels()Bitmap.setPixels()更安全,因为API保证了这些函数处理的数据格式。 特别是,您不必担心预乘和非预乘alpha,因为这些函数会为您处理。