假设我想创建一个像素值数组,以传递给here描述的createBitmap
方法。我有三个int值r, g, b
,范围是0 - 0xff。如何将它们转换为不透明像素p
?
alpha通道是进入高字节还是低字节?
我搜索了documentation,但它只说明了:
每个像素存储在4个字节上。每个通道(RGB和alpha用于 半透明度以8位精度存储(256种可能 值。)这种配置非常灵活,提供最好的 质量。应尽可能使用它。
那么,如何编写这个方法呢?
int createPixel(int r, int g, int b)
{
return ?
}
答案 0 :(得分:11)
看起来RGBA pixel format有很好的文档记录,我假设这是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;
}
此外,您可能希望使用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]
可能更有意义。
答案 1 :(得分:6)
来自the docs:
(alpha << 24) | (red << 16) | (green << 8) | blue
答案 2 :(得分:1)
首先,你的参数应该是字节,而不是整数,但我想这可能是一个实现问题。
一般来说,你会做类似
的事情return b | r<<8 | g<<16 | 255<<24;
假设您的alpha为255(非透明)。
答案 3 :(得分:1)
这应该有效:
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;
}