cgimageref是定义在quartzcore框架中的一个结构体指针,用c语言编写。在cgimage.h文件中,我们可以看到下面的定义:
<a href="http://my.oschina.net/u/2340880/blog/406437#">?</a>
1
<code>typedef</code> <code>struct</code> <code>cgimage *cgimageref;</code>
cgimageref 和 struct cgimage * 是完全等价的。这个结构用来创建像素位图,可以通过操作存储的像素位来编辑图片。
quartzcore这个框架是可移植的。
cftypeid cgimagegettypeid(void)
这个方法返回的是一个编号,每个core foundation框架中得结构都会有一个这样的编号,cftypeid定义如下:
2
3
4
5
6
7
8
9
10
11
<code>#if __llp64__</code>
<code>typedef</code> <code>unsigned </code><code>long</code> <code>long</code> <code>cftypeid;</code>
<code>typedef</code> <code>unsigned </code><code>long</code> <code>long</code> <code>cfoptionflags;</code>
<code>typedef</code> <code>unsigned </code><code>long</code> <code>long</code> <code>cfhashcode;</code>
<code>typedef</code> <code>signed</code> <code>long</code> <code>long</code> <code>cfindex;</code>
<code>#else</code>
<code>typedef</code> <code>unsigned </code><code>long</code> <code>cftypeid;</code>
<code>typedef</code> <code>unsigned </code><code>long</code> <code>cfoptionflags;</code>
<code>typedef</code> <code>unsigned </code><code>long</code> <code>cfhashcode;</code>
<code>typedef</code> <code>signed</code> <code>long</code> <code>cfindex;</code>
<code>#endif</code>
这个方法没有特殊的意义,只是一个标识符。
cgimageref cgimagecreate(size_t width, size_t height,
size_t bitspercomponent, size_t bitsperpixel, size_t bytesperrow,
cgcolorspaceref space, cgbitmapinfo bitmapinfo, cgdataproviderref provider,
const cgfloat decode[], bool shouldinterpolate,
cgcolorrenderingintent intent);
通过这个方法,我们可以创建出一个cgimageref类型的对象,下面分别对参数进行解释:
sizt_t是定义的一个可移植性的单位,在64位机器中为8字节,32位位4字节。
width:图片宽度像素
height:图片高度像素
bitspercomponent:每个颜色的比特数,例如在rgba-32模式下为8
bitsperpixel:每个像素的总比特数
bytesperrow:每一行占用的字节数,注意这里的单位是字节
space:颜色空间模式,例如const cfstringref kcgcolorspacegenericrgb 这个函数可以返回一个颜色空间对象。
bitmapinfo:位图像素布局,枚举如下:
<code>typedef</code> <code>cf_options(uint32_t, cgbitmapinfo) {</code>
<code> </code><code>kcgbitmapalphainfomask = 0x1f,</code>
<code> </code><code>kcgbitmapfloatcomponents = (1 << 8),</code>
<code> </code>
<code> </code><code>kcgbitmapbyteordermask = 0x7000,</code>
<code> </code><code>kcgbitmapbyteorderdefault = (0 << 12),</code>
<code> </code><code>kcgbitmapbyteorder16little = (1 << 12),</code>
<code> </code><code>kcgbitmapbyteorder32little = (2 << 12),</code>
<code> </code><code>kcgbitmapbyteorder16big = (3 << 12),</code>
<code> </code><code>kcgbitmapbyteorder32big = (4 << 12)</code>
<code>}</code>
provider:数据源提供者
decode[]:解码渲染数组
shouldinterpolate:是否抗锯齿
intent:图片相关参数
cgimageref cgimagemaskcreate(size_t width, size_t height,
cgdataproviderref provider, const cgfloat decode[], bool shouldinterpolate)
这个方法用于创建mask图片图层,可以设置其显示部分与不显示部分达到特殊的效果,参数意义同上。
cgimageref cgimagecreatecopy(cgimageref image)
这个方法可以复制一个cgimageref对象
cgimageref cgimagecreatewithjpegdataprovider(cgdataproviderref
source, const cgfloat decode[], bool shouldinterpolate,
cgcolorrenderingintent intent)
通过jpeg数据源获取图像
cgimageref cgimagecreatewithpngdataprovider(cgdataproviderref source,
通过png数据源获取图像
cgimageref cgimagecreatewithimageinrect(cgimageref image,
cgrect rect)
截取图像的一个区域重绘图像
cgimageref cgimagecreatewithmask(cgimageref image, cgimageref mask)
截取mask图像的某一区域重绘
cgimageref cgimagecreatewithmaskingcolors(cgimageref image,
const cgfloat components[])
通过颜色分量数组创建位图
cgimageref cgimagecreatecopywithcolorspace(cgimageref image,
cgcolorspaceref space)
通过颜色空间模式复制位图
cgimageref cgimageretain(cgimageref image)
引用+1
void cgimagerelease(cgimageref image)
引用-1
bool cgimageismask(cgimageref image)
返回是否为mask图层
size_t cgimagegetwidth(cgimageref image)
获取宽度像素
size_t cgimagegetheight(cgimageref image)
获取高度像素
下面这些方法分别获取相应属性
size_t cgimagegetbitspercomponent(cgimageref image)
size_t cgimagegetbitsperpixel(cgimageref image)
size_t cgimagegetbytesperrow(cgimageref image)
cgcolorspaceref cgimagegetcolorspace(cgimageref image)cg_extern cgimagealphainfo cgimagegetalphainfo(cgimageref image)
cgdataproviderref cgimagegetdataprovider(cgimageref image)
const cgfloat *cgimagegetdecode(cgimageref image)
bool cgimagegetshouldinterpolate(cgimageref image)
cgcolorrenderingintent cgimagegetrenderingintent(cgimageref image)
cgbitmapinfo cgimagegetbitmapinfo(cgimageref image)
使用cgimageref进行图片截取
<code> </code><code>//原图片</code>
<code> </code><code>uiimage * img = [uiimage imagenamed:@</code><code>"11.11.52.png"</code><code>];</code>
<code> </code><code>//转化为位图</code>
<code> </code><code>cgimageref temimg = img.cgimage;</code>
<code> </code><code>//根据范围截图</code>
<code> </code><code>temimg=cgimagecreatewithimageinrect(temimg, cgrectmake(0, 0, 100, 100));</code>
<code> </code><code>//得到新的图片</code>
<code> </code><code>uiimage *</code><code>new</code> <code>= [uiimage imagewithcgimage:temimg];</code>
<code> </code><code>//释放位图对象</code>
<code> </code><code>cgimagerelease(temimg);</code>
注意:最后必须要调用这个函数,否则会造成内存泄露
<code> </code><code>cgimagerelease(temimg)</code>