繁体   English   中英

如何创建一个ARGB_8888像素值?

[英]How to create an ARGB_8888 pixel value?

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

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

我用谷歌搜索了文档,但是只声明了:

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

那么,该怎么写呢?

int createPixel(int r, int g, int b)
{
  return ?
}

看来RGBA像素格式已被很好地记录下来,我假设这就是Android文档的含义,只是使用一个不同的名称来匹配bit字段中的通道成员资格位置:

在此处输入图片说明

这样的事情应该起作用:

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;
}

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

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

尽管将值限制为[0,255]可能更有意义。

文档

(alpha << 24) | (red << 16) | (green << 8) | blue

首先,您的参数应该是字节,而不是整数,但是我想这可能是实现问题。

一般来说,您会做类似的事情

return b | r<<8 | g<<16 | 255<<24;

假设您的Alpha为255(非透明)。

这应该工作:

int createPixel(int r, int g, int b)
{
    return 0xff000000 | (r << 16) | (g << 8) | b;
}

或者,如果您想成为巴洛克风格:

int createPixel(int r, int g, int b)
{
    return (((((-1 << 8) | r) << 8) | g) << 8) | b;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM