如何创建ARGB_8888像素值?

vid*_*ige 1 java android pixel bitmap

假设我想创建一个像素值数组,以传递到此处createBitmap描述的方法中.我在0 - 0xff范围内有三个int值.如何将它们转换为不透明像素?r, g, bp

alpha通道是进入高字节还是低字节?

我搜索了文档,但它只说明:

每个像素存储在4个字节上.每个通道(RGB和alpha为半透明)以8位精度(256个可能的值)存储.这种配置非常灵活,并提供最佳质量.应尽可能使用它.

那么,如何编写这个方法呢?

int createPixel(int r, int g, int b)
{
  return ?
}
Run Code Online (Sandbox Code Playgroud)

mae*_*ics 11

看起来像RGBA像素格式已经很好地记录了,我假设这是Android文档的意思,只是使用不同的名称来匹配位字段中的通道成员位置:

在此输入图像描述

这样的事情应该有效:

int createPixel(int r, int g, int b) {
  return createPixel(r, g, b, 0xff);
}

int createPixel(int r, int g, int b, int a) {
  return (a<<24) | (r<<16) | (g<<8) | b;
}
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望使用a byte而不是a int来避免溢出类型错误,或仅屏蔽所需的位:

int createPixel(int r, int g, int b, int a) {
  return ((a & 0xff) << 24)
       | ((r & 0xff) << 16)
       | ((g & 0xff) << 8)
       | ((b & 0xff));
}
Run Code Online (Sandbox Code Playgroud)

尽管将值限制在一起[0,255]可能更有意义.


Gra*_*and 6

来自文档:

(alpha << 24) | (red << 16) | (green << 8) | blue
Run Code Online (Sandbox Code Playgroud)