RGB565格式说明
RGB565彩色模式, 一个像素占两个字节, 其中:第一个字节的前5位用来表示R(Red),第一个字节的后三位+第二个字节的前三位用来表示G(Green),第二个字节的后5位用来表示B(Blue)。如:15 14 13 121110 9 8 , 7 6 54 3 2 1 0
而bitmap图片是一个RGB888,每个像素由3个字节组成,R->8bit,G->8bit,B->8bit;RGB565 的每个pixels是由2字节组成,R->5bit,G->6bit,B->5bit。转换的思路是取出原图的点,对每个采样进行运算。
RGB 565格式图片直接转换成RGB 8888格式图片
先获取RGB 565格式图片的颜色的字节数组,也就是byte[ ],再转换成RGB 8888格式的像素点色阶值,中间转换用到ByteBuffer。
/**
* RGB 565格式图片转RGB 8888格式图片
* @param src
* @return
*/
public static Bitmap getTransformBitmap(Bitmap src) {
int width = src.getWidth(); // 宽
int height = src.getHeight(); // 高
int count = src.getByteCount(); // 获取图片的RGB 565颜色数组总数
ByteBuffer buffer = ByteBuffer.allocate(count);
src.copyPixelsToBuffer(buffer);
byte[] data = buffer.array(); //获取数组
int sum = width * height;
int[] pixels = new int[sum];
for (int i = 0; i < sum; i++) {
int tmpint = data[i * 2 + 0] + data[i * 2 + 1] * 256;
int a = 0xff; //透明度
int r = (tmpint & 0xf800) >> 11; //红
int g = (tmpint & 0x07e0) >> 5; //绿
int b = (tmpint & 0x001f); //蓝
r = r << 3;
g = g << 2;
b = b << 3;
pixels[i] = (a << 24) | (r << 16) | (g << 8) | (b);
}
Bitmap bmp = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
bmp.setPixels(pixels, 0, width, 0, 0, width, height);
return bmp; //旋转屏幕
}