如果我单独处理每个颜色通道,我有一个处理算法表现良好。但是当我试图处理整个像素值时,事情就错过了。结果不好。现在我想将3色通道与像素值(排除alpha)隔离,然后处理新值(3个通道)。 我怎么能用C ++做到这一点?知道我尝试了RGB_565位图格式,这不是一个好的解决方案。并且知道我想将RGB合并为24位变量。
答案 0 :(得分:1)
您可以单独访问每个频道。确切的方式取决于实际的像素格式。
ANDROID_BITMAP_FORMAT_RGBA_8888
:每个像素长4个字节,布局模式为RGBARGBA ...,即第1个像素字节为红色分量,2-d为绿色,3-d为蓝色,第4个是alpha分量。
ANDROID_BITMAP_FORMAT_RGB_565
:每个像素长度为2个字节,以原始字节序存储,因此可以通过下一个方式提取颜色分量:
red = (u16_pix >> 11) & 0x1f;
green = (u16_pix >> 5) & 0x3f;
blue = (u16_pix >> 0) & 0x1f;
ANDROID_BITMAP_FORMAT_RGBA_4444
:
由于质量差而被弃用,你甚至不应该考虑这个
ANDROID_BITMAP_FORMAT_A_8
:
每像素1个字节,专为仅alpha或灰度图像而设计。这可能不是你想要的。
请注意,Android没有24bpp格式,您必须选择32bpp或16bpp。关于你的算法:有两种选择 - 代码可以在打包的像素值内部访问各个组件,或者你可以将打包的像素解交织到几个平面,即数组,每个平面只能容纳一个通道。然后在处理之后,您可以将它们再次交错到其中一种支持的格式,或者转换为您感兴趣的其他格式。