uiimage转换成cximage

来源:互联网 发布:部落冲突武神升级数据 编辑:程序博客网 时间:2024/04/27 20:26

uiimage转换成cximage

      1、将uiimage转换cximage需要将uiimage中的数据提取出来,并放置到一个char*中:

我们定义一个名为imageData的unsigned char*类型(注意malloc空间,同时也要注意使用完后free掉),而接下来要做的就是把uiimage中的数据转变成我们定义的imagedata,那么,该如何转变呢?以下两个函数需要注意:CGBitmapContextCreate和CGContextDrawimage.

     首先,我们说说第一个函数,第一个函数是用来获取位图图形的上下文信息的,所以我们需要先定义一个CGContextRef的实例,我们命名为cgcnt.然后我们就该说说CGBitmapContextCreate的7个参数了,CGBitmapContextCreate共有7个参数,从第一个到最后一个分别是void *data、size_t width、size_t height、size_t bitsPerComponent、size_t bitsPerRow、CGColorSpaceRef colorspace、CGBitmapInfo bitmapInfo,第一个参数指向的是存储空间的地址,也就是我们前面定义的imageData;第二个参数是位图的宽;第三个参数是位图的高;第四个指的是每个像素的位数;第五个指的是像素一行的字节数;第六个是用来获取颜色信息的,我们需要定义一个CGColorSpaceRef ,CGColorSpaceRef有很多种,我们选择其中的CGColorSpaceCreateDeviceRGB();第七个使用来存储位图信息的,它同样有多种,我们选择kCGImageAlphaPremultipliedLast。设置好这7个参数,我们也就得到了位图的上下文信息了。

    然后,根据上面得到的位图上下文信息,利用CGContextDrawimage来实现转换的目的了。CGContextDrawimage有3个参数,第一个参数表示的就是我们上文创建的位图上下文信息,第二个参数表示的是图像的范围大小,第三个参数表示的是一个CGImage,而这个CGImage就是我们需要转换的uiimage通过CGImage方法得到的。

   知道了所有的参数信息,除了CGColorSpaceRef和CGBitmapInfo需要查查帮助外,我们就可以看图填空了,就这样,我们完成了一个从uiimage转换到cximage的过程。

   友情提示:转换之后记得release掉CGColorSpace和CGContextRef,我们可以分别调用CGColorSpaceRelease和CGContextRelease进行release操作。

     2、将unsigned char*转换为cximage:

首先我们需要定义一个cximage,我们命名为xiImage。调用cximage的Create(注意是32位)和AlphaCreate函数创建一个空白的cximage。接下来就是为这个空白的cximage填充颜色了,所以我们还需要定义一个RGBQUAD,然后将imagedata中的数据赋到RGBQUAR上(每赋值一个像素就调用一次cximage的SetPixelColor函数将它写到xiImage上),

具体赋值可见代码

for(int y = 0;y < uiImage.size.height;y++)

 {
       for(int x =0;x <uiImage.size.width;x++)

 
       {

 
           rgbquad.rgbRed =imageData[4*(int)uiImage.size.width*y+4*x];

 
           rgbquad.rgbGreen =imageData[4*(int)uiImage.size.width*y+4*x+1];

 
           rgbquad.rgbBlue =imageData[4*(int)uiImage.size.width*y+4*x+2];

 
           rgbquad.rgbReserved =imageData[4*(int)uiImage.size.width*y+4*x+3];

 
           xiImage->SetPixelColor(x,y, rgbquad,true);

 
       }

    }


得到的xiImage就是将uiimage转换得到的cximage。

注意:结束上述循环赋值操作后,记得free掉imagedata!

cximage转换成uiimage会在下一篇文章会中阐述。


友情提示:导入cximage动态库后,需要将m文件变为mm文件使之能够识别c++的函数,ximage.h头文件需要在mm文件中加入。

原创粉丝点击