RGB565数据转RGB8888图片

本文介绍了RGB565彩色模式的结构,每个像素由两个字节表示,其中R:5位,G:6位,B:5位。对比RGB888格式,每个像素由3字节组成,各颜色分量为8位。转换过程涉及从RGB565的字节数组转换成RGB8888的像素点,使用ByteBuffer进行中间运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;    //旋转屏幕
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值