gpt4 book ai didi

java - Android 在使用 copyPixelsToBuffer 时如何应用 alpha channel ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:20 26 4
gpt4 key购买 nike

相关主题(尚无解决方案):Access to raw data in ARGB_8888 Android Bitmap

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

我需要将其转换为原始 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()Bitmap.setPixels() 更安全,因为 API 保证了这些函数处理的数据格式。特别是,您不必担心预乘和取消预乘 alpha,因为这些函数会为您处理。

关于java - Android 在使用 copyPixelsToBuffer 时如何应用 alpha channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com