美文网首页iOS开发&OC@Swift
RGB565图片格式转成UIImage

RGB565图片格式转成UIImage

作者: 程序员LesterXu | 来源:发表于2017-04-04 21:53 被阅读216次

    进公司第一个项目是做一个红外测温仪的。由于仪器传输过来的图片数据是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图片。通过转换就可以得到需要的图片。

    以下就是最后转换的图片

    1.png 2.png 3.png

    相关文章

      网友评论

        本文标题:RGB565图片格式转成UIImage

        本文链接:https://www.haomeiwen.com/subject/imubvttx.html