RGB565图片格式转成UIImage

进公司第一个项目是做一个红外测温仪的。由于仪器传输过来的图片数据是RGB565格式的,这种格式的图片是一种位图(Bitmap),并不能直接展示出来。一般是转成UIImge。
趁着清明放假整理一下。(本来春节放假就应该整理的,后来一直拖拖,项目中遇到的问题还是要经常整理的)
还是一次做这种项目,不会,那只有去找资料。后来找来找去也没有找到什么,最后找到一个很久以前别人写的一篇帖子。根据帖子写的方法,然后将自己接受的数据处理好后传进去,发现效果并不好,后来把里面的参数调了个边也没有把图片质量优化好。最后只有先搁置一段时间,等把项目其他功能完善好了再说。后来客户不满意图片质量,于是又开始找方法进行优化。后来的思路是iOS应该不支持RGB565,然后就想办法转成RGB8888(RGB32),然后在将RGB8888(RGB32)转成UIImage。

///图像转换方法 RGB32
+ (UIImage *)rgb565ToUIImage:(Byte *)rawData width:(int)width height:(int)height{
    
    const size_t bufferLength = width * height * 2;
    //防止在初始化时数据为空造成崩溃
    if (rawData == NULL) {
        
        return nil;
    }
    
    NSData *data = [NSData dataWithBytes:rawData length:bufferLength];
    
    NSData *RGB8888Data = [self RGB8888Data:data width:width height:height];
    
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)RGB8888Data);
    
    //Creating CGImage from cv::Mat
    CGImageRef imageRef = CGImageCreate(width,          //width
                                        height,         //height
                                        8,              //bits per component
                                        32,             //bits per pixel
                                        width * 4,      //bytesPerRow
                                        colorSpace,     //colorspace
                                        kCGImageAlphaNoneSkipLast |
                                        kCGImageByteOrderMask,      // bitmap info
                                        provider,                 //CGDataProviderRef
                                        NULL,                    //decode
                                        true,                   //should interpolate
                                        kCGRenderingIntentDefault   //intent
                                        );
    
    //Getting UIImage from CGImage
    UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    CGDataProviderRelease(provider);
    CGColorSpaceRelease(colorSpace);
    
    return finalImage;

}

这里的data就是接收到的一帧完整的RGB565图片。通过转换就可以得到需要的图片。

以下就是最后转换的图片

RGB565图片格式转成UIImage_第1张图片
1.png
RGB565图片格式转成UIImage_第2张图片
2.png
RGB565图片格式转成UIImage_第3张图片
3.png

你可能感兴趣的:(RGB565图片格式转成UIImage)