我在字节rgb_565数组中有图片数据,我希望以高效的方式将其转换为argb数组。现在我发现只有一种(慢速)方法:
Bitmap mPhotoPicture = BitmapFactory.decodeByteArray(imageData, 0 , imageData.length);
其中imageData
是我在rgb_565中的byte[]
数组,然后是:
int pixels[] = new int[CameraView.PICTURE_HEIGHT*CameraView.PICTURE_WIDTH];
mPhotoPicture.getPixels(pixels, 0,PICTURE_WIDTH, 0, 0, PICTURE_WIDTH, PICTURE_HEIGHT);
关键是我认为创建一个Bitmap
对象是严格的,在这种情况下不是必需的。还有其他更快的方法将rgb_565数组转换为argb数组吗?
我需要这个,因为在rgb_565数组上进行图像处理似乎有点烦人。或者也许不是很难?
答案 0 :(得分:6)
你为什么不手工做?一张表是我最快的经历:
C代码:
static unsigned char rb_table[32];
static unsigned char g_table[64];
void init (void)
{
// precalculate conversion tables:
int i;
for (i=0; i<32; i++)
rb_table[i] = 255*i/31;
for (i=0; i<64; i++)
g_table[i] = 255*i/63;
}
void convert (unsigned int * dest, unsigned short * src, int n)
{
// do bulk data conversion from 565 to rgb32
int i;
for (i=0; i<n; i++)
{
unsigned short color = src[i];
unsigned int red = rb_table[(color>>11)&31]<<16;
unsigned int green = g_table[(color>>5)&63]<<8;
unsigned int blue = rb_table[color&31];
dest[i] = red|green|blue;
}
}