图片处理 CGImageRef
2018-10-11 本文已影响24人
noyya
1. 创建一个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);
- sizt_t : 是定义的一个可移植性的单位,在64位机器中为8字节,32位位4字节。
- width:图片宽度像素
- height:图片高度像素
- bitsPerComponent:每个颜色的比特数,例如在rgba-32模式下为8
- bitsPerPixel:每个像素的总比特数
- bytesPerRow:每一行占用的字节数,注意这里的单位是字节
- space:颜色空间模式,例如const CFStringRef kCGColorSpaceGenericRGB 这个函数可以返回一个颜色空间对象。
- bitmapInfo:位图像素布局,这是个枚举
- provider:数据源提供者
- decode[]:解码渲染数组
- shouldInterpolate:是否抗锯齿
- intent:图片相关参数
2. 创建mask图片图层,可以设置其显示部分与不显示部分达到特殊的效果
CGImageMaskCreate(size_t width, size_t height,size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow, CGDataProviderRef provider, const CGFloat decode[], bool shouldInterpolate)
3. 复制一个CGImageRef对象
CGImageCreateCopy(CGImageRef image)
4. 通过JPEG数据源获取图像
CGImageCreateWithJPEGDataProvider(CGDataProviderRef source, const CGFloat decode[], bool shouldInterpolate,CGColorRenderingIntent intent)
5. 通过PNG数据源获取图像
CGImageCreateWithPNGDataProvider(CGDataProviderRef source,const CGFloat decode[], bool shouldInterpolate,CGColorRenderingIntent intent)
6. 截取图像的一个区域重绘图像
CGImageCreateWithImageInRect(CGImageRef image,CGRect rect)
7. 截取mask图像的某一区域重绘
CGImageCreateWithJPEGDataProvider(CGDataProviderRef source, const CGFloat decode[], bool shouldInterpolate,CGColorRenderingIntent intent)
8. 通过颜色分量数组创建位图
CGImageCreateWithMaskingColors(CGImageRef image,const CGFloat components[])
9. 通过颜色空间模式复制位图
CGImageCreateCopyWithColorSpace(CGImageRef image,CGColorSpaceRef space)
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)
应用举例
//原图片
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);
注意 : 最后必须要调用这个释放函数,否则会造成内存泄露
CGImageRelease(temImg)