我想在 Android 上获取位图的 RGB 值,但目前还无法做到这一点。我的目标是获取位图每个像素的 RGB 值。 Android 或其他有什么特定的功能吗?
我也想知道我需要colorMatrix()
功能?
这对我的项目非常重要。
这可能有点晚了,但为了消除使用 &0xff 的混乱:
在 Java 中,整数为 32 位,因此每个像素的 (A)RGB 值都封装在 4 个字节中。
换句话说,ARGB_8888 模型中值为 R(123)、G(93)、B(49) = FF7B 5D31 的像素。其中 Alpha = FF,R = 7B,G = 5D,B = 31。但这作为 int 存储为 -8692431。
因此,要从 -8692431 中提取绿色值,我们需要将 5D 向右移动 8 位,如您所知。这给出了 00FF 7B5D。因此,如果我们只采用该值,我们将留下 16743261 作为绿色值。因此,我们使用掩码 0xFF(相当于 0000 00FF)对该值进行按位与,将导致 00FF 7B5D 被“掩码”为 0000 005D。所以我们提取了 5D(或十进制 93)的绿色值。
我们可以对每次提取使用相同的 0xFF 掩码,因为所有值都已移位以将所需的两个字节暴露为最低有效字节。因此,之前建议的代码为:
int p = pixel[index];
int R = (p >> 16) & 0xff;
int G = (p >> 8) & 0xff;
int B = p & 0xff;
如果它更清楚,您可以执行以下等效操作:
int R = (p & 0xff0000) >> 16;
int G = (p & 0x00ff00) >> 8;
int B = (p & 0x0000ff) >> 0;
为了简洁起见,多余的 0 可以去掉,可以写成
int R = (p & 0xff0000) >> 16;
int G = (p & 0xff00) >> 8;
int B = p & 0xff;
但请注意,可以使用替代颜色模型,例如 RGB_555,它将每个像素仅存储为 2 个字节,并且 RGB 通道的精度不同。因此,您应该在执行提取之前检查位图所使用的模型,因为颜色的存储方式可能不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)