当前位置 : 主页 > 手机开发 > android >

如何从Android设备上的位图获取RGB值?

来源:互联网 收集:自由互联 发布时间:2021-06-11
我想在 android中获取位图的RGB值,但到目前为止我无法做到这一点.我的目标是获得位图的每个像素的RGB值. Android或其他任何特定功能? 另外我想知道我需要colorMatrix()函数吗? 这对我的项
我想在 android中获取位图的RGB值,但到目前为止我无法做到这一点.我的目标是获得位图的每个像素的RGB值. Android或其他任何特定功能?
另外我想知道我需要colorMatrix()函数吗?
这对我的项目非常重要.谢谢 这可能会稍晚,但要清除使用& 0xff的混淆:

在Java中,int是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中提取Green值,我们需要将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通道的不同精度.因此,在执行提取之前,应检查位图正在使用的模型,因为颜色可能以不同方式存储.

网友评论