IOS中对图片进行重绘处理的方法总结

一、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)

时间: 2024-10-06 05:38:06

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

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

我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import "JXHypnosisView.h" @interface JXHypnosisView () /** 颜色 */ @property (nonatomic,strong) UIColor * circleColor; @end @implementation JXHypnosisView - (in

【MFC】MFC中窗口重绘

MFC中窗口重绘 摘自:http://blog.csdn.net/shuilan0066/article/details/5859057 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和 WM_NCPAINT(通知非客户区有变化)WM_NVPAINT系统会自己搞定WM_PAINT消息对应的函数是

MFC中窗口重绘

搬家于CSDN 2015-05-14 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和 WM_NCPAINT    (通知非客户区有变化) WM_NVPAINT    系统会自己搞定 WM_PAINT         消息系统默认对应的函数是OnPaint(),但‍一般在重绘时都在OnDraw,因为在ONPAIN中调用了OND

IOS中Json解析的四种方法

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的ios版本,可以使用第三方库来解析Json. 本文将介绍TouchJso

【转】IOS中Json解析的四种方法

原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSer

iOS中创建动态库及调用方法

去年因需要用到动态库,自己就找了好多一些 资料,最终找到了一套方法,怎么创建与使用动态库,记录一下: Xcode提供了在iOS工程中创建静态库的功能,和在MAC上创建动态库和静态库的功能. 但是没有提供在iOS工程中创建动态库的功能(苹果官方不允许程序中存在动态库链接,这样的程序会被AppStore拒),如下图:  由于苹果不支持自己创建iOS动态库,所以要想创建动态库首先要修改Xcode的配置文件使其支持具备创建iOS 动态库的功能, 经过调研和查询网上的一些资料,并经过自己测试成功,以下是修

IOS中搜索框UISearchBar及搜索方法的使用

搜索框可以用UISearchBar,并且可以设置代理UISearchBarDelegate. 1 -(void)addSearchBar{ 2 CGRect searchBarRect = CGRectMake(0, 0, self.view.frame.size.width, 44); 3 UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:searchBarRect]; 4 searchBar.placeholder = @"

iOS 中各种折线.曲线.图形绘制方法集锦(折线图.走势图.柱状图.动态曲线图.形状图.划线图)

前言 具体实现如下: 目录 前言 第一 折线图实现 .1) 自定义视图实现 .2)关键技术实现 .3) 方法调用 .4) 效果展示 第二 走势曲线图实现 .1) 导入DJChart第三方库 .2)横竖轴参数设置 .3) 方法调用 .4) 效果展示 第三 画线图实现 .1) 导入ZXQuartz第三方库 .2) 自定义视图,画各种图形 .3) 方法调用 .4) 效果展示 第四 柱状图实现 .1) 导入ZXQuartz第三方库 .2)横竖轴参数设置 .3) 方法调用 .4) 效果展示 第五 各式图形

【iOS和HTML 5交互】iOS中加载html5调用html方法和修改html5内容

近期项目开发中用到了这方面的技术了,那我们一起来看看. 1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作HTML5中的标签(CRUD-->增删改查) 1.用类选择器或者id选择器或者标签选择器等选择要进行操作的标签 2.把选择好的标签转换成字符串 3.webView调用stringByEvaluatingJavaScriptFromString方法