一、CGImageRef是什么

CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写。在CGImage.h文件中,我们可以看到下面的定义:

1
typedef struct CGImage *CGImageRef;

CGImageRef 和 struct CGImage * 是完全等价的。这个结构用来创建像素位图,可以通过操作存储的像素位来编辑图片。

QuartzCore这个框架是可移植的。

二、CGImageRef相关的一些方法解析

CFTypeID CGImageGetTypeID(void)

这个方法返回的是一个编号,每个Core Foundation框架中得结构都会有一个这样的编号,CFTypeID定义如下:

1
2
3
4
5
6
7
8
9
10
11
#if __LLP64__
typedef unsigned long long CFTypeID;
typedef unsigned long long CFOptionFlags;
typedef unsigned long long CFHashCode;
typedef signed long long CFIndex;
#else
typedef unsigned long CFTypeID;
typedef unsigned long CFOptionFlags;
typedef unsigned long CFHashCode;
typedef signed long CFIndex;
#endif

这个方法没有特殊的意义,只是一个标识符。

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:位图像素布局,枚举如下:

1
2
3
4
5
6
7
8
9
10
11
typedef CF_OPTIONS(uint32_t, CGBitmapInfo) {
  kCGBitmapAlphaInfoMask = 0x1F,
  kCGBitmapFloatComponents = (1 << 8),
     
  kCGBitmapByteOrderMask = 0x7000,
  kCGBitmapByteOrderDefault = (0 << 12),
  kCGBitmapByteOrder16Little = (1 << 12),
  kCGBitmapByteOrder32Little = (2 << 12),
  kCGBitmapByteOrder16Big = (3 << 12),
  kCGBitmapByteOrder32Big = (4 << 12)
}

provider:数据源提供者

decode[]:解码渲染数组

shouldInterpolate:是否抗锯齿

intent:图片相关参数

CGImageRef CGImageMaskCreate(size_t width, size_t height,

size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow,

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,

const CGFloat decode[], bool shouldInterpolate,

CGColorRenderingIntent intent)

通过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进行图片截取

1
2
3
4
5
6
7
8
9
10
    //原图片
    UIImage * img = [UIImage imageNamed:@"11.11.52.png"];
    //转化为位图
    CGImageRef temImg = img.CGImage;
    //根据范围截图
    temImg=CGImageCreateWithImageInRect(temImg, CGRectMake(0, 0, 100, 100));
    //得到新的图片
    UIImage *new = [UIImage imageWithCGImage:temImg];
    //释放位图对象
    CGImageRelease(temImg);

注意:最后必须要调用这个函数,否则会造成内存泄露

1
 CGImageRelease(temImg)

IOS中对图片进行重绘处理的方法总结的更多相关文章

  1. iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)

    我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import " ...

  2. 【MFC】MFC中窗口重绘

    MFC中窗口重绘 摘自:http://blog.csdn.net/shuilan0066/article/details/5859057 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重 ...

  3. MFC中窗口重绘

    搬家于CSDN 2015-05-14 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗 ...

  4. java中的重绘

    void java.awt.Container.validate()Validates this container and all of its subcomponents.这个函数更新容器及其全部 ...

  5. WinForm中的重绘 - 按钮等控件的背景渐变色重绘

    注:brush通过起止坐标来控制重绘范围及方向.比如从上到下渐变时,brush第二个Point参数是左下角坐标. private void PaintGradientBackground(Button ...

  6. Winfrom 减少控件重绘闪烁的方法

    Winform控件的双缓冲.控件的双缓冲属性是隐藏的,可以通过反射改变其属性值. lv.GetType().GetProperty("DoubleBuffered", Bindin ...

  7. iOS中UI阶段常用的一些方法

    UI 即 UserInterface(用户界面 1.iOS系统版本,每年都有更新.对我们开发者而言,主要的是观察API的变化. 2.iPhone新手机发布,会产生不同尺寸的屏幕,现在市面上有4种尺寸, ...

  8. IOS中Json解析的四种方法

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...

  9. iOS中UIKit的外观属性及方法汇总

    这里将UIKit的外观属性及方法从头文件中抽取出来,以便查找及熟悉.(更新到iOS 8.0,从A-Z排序) UIActivityIndicatorView @property (readwrite,  ...

随机推荐

  1. .net中将DataTable导出到word、Excel、txt、htm的方法

    dt:DataTable strFile:fileName strExt:type private void GridExport(DataTable dt, string strFile, stri ...

  2. IEquatable(T) interface in .Net

    原文:http://weblogs.asp.net/pawanmishra/iequatable-t-interface-in-net 泛型方法: public static bool AreEqua ...

  3. cell的各种使用和赋值 总结

    cell可以分为:自定义cell,系统的cell ,cell的自适应,.xib的cell //第一种cell:系统cell 在 UIViewController下创建UITableView //1.0 ...

  4. php中的MVC模式运用

    [size=5][color=Red]php中的MVC模式运用[/color][/size] 首先我来举个例子: 一个简单的文章显示系统 简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉 ...

  5. 使用spool命令从Oracle导出数据

    公司的网站用的是Oracle数据库,最近要导出里面的数据,使用mysql数据库 spool D:\DB\{文件名}.sql set heading off; set echo off; set fee ...

  6. python产生随机名字

    用到random.choice(序列) 在一个序列中随机选取一个值 import random as r a1=['张','金','李','王','赵'] a2=['玉','明','龙','芳','军 ...

  7. js django 数据互动

    后台传输到客户端的数据怎么跟js进行互动 eval("("+{{data|safe}}+")") 获取到的数据可以直接使用 eval 有时候会存在编码问题所以推 ...

  8. poj3261 -- Milk Patterns

                                                                        Milk Patterns Time Limit: 5000MS ...

  9. Advanced Bash-Scripting Guide

    在UC Berkeley 课程代号CS9E上看到的资源 http://www-inst.eecs.berkeley.edu/~selfpace/studyguide/cs9e/ http://www. ...

  10. linux查看系统版本和系统位数 (转)

    1. uname -ayou will view kernel name.network node hostname.kernel release.kernel version.machine har ...