介绍CGImageRef的基本概念及方法说明

【IOS 开发学习总结-OC-63】UIImage 与 CGImage,CGImageRef 【IOS 开发学习总结-OC-63】UIImage 与 CGImage,CGImageRefUIImage 专门用来显示各种位图,支持的图片格式有: 当系统内存紧张时,UIImage会将图片数据从UIImage对象中清理出去来节省内存使用——但不清理对象本身。当程序使用一个图片被清理后的UIImage对象时,该UIImage会自动从原始的图片文件中加载图片数据。 注意:尽量避免UIImage加 阅读详情
介绍CGImageRef的基本概念及方法说明

在IOS开发中,我们时常会用到裁剪图片,重绘图片等方法,CGImageRef(像素位图)便是我们经常会使用到的一个对象.

CGImageRef是什么

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

typedef struct CGImage * CGImageRef;

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

QuartzCore这个框架是可移植的.

CGImageRef相关的一些方法说明
  • 返回标识符
CFTypeID CGImageGetTypeID(void)

//CFTypeID定义如下:

#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

//这个方法返回的是一个编号,每个Core Foundation框架中得结构都会有一个这样的编号,它没有特殊的意义,只是一个标识符.

  • 创建出一个CGImageRef类型的对象的方法
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图片相关参数

bitmapInfo的枚举:

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)
}
  • 用于创建mask图片图层,可以设置其显示部分与不显示部分达到特殊的效果的方法,参数意义同上.
CGImageRef CGImageMaskCreate(size_t width, size_t height,

    size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow,

    CGDataProviderRef provider, const CGFloat decode[], bool shouldInterpolate)
  • 复制一个CGImageRef对象
CGImageRef CGImageCreateCopy(CGImageRef image)
  • 通过JPEG数据源获取图像
CGImageRef CGImageCreateWithJPEGDataProvider(CGDataProviderRef

    source, const CGFloat decode[], bool shouldInterpolate,

    CGColorRenderingIntent intent)
  • 通过PNG数据源获取图像
CGImageRef CGImageCreateWithPNGDataProvider(CGDataProviderRef source,

    const CGFloat decode[], bool shouldInterpolate,

    CGColorRenderingIntent intent)
  • 截取图像的一个区域重绘图像
CGImageRef CGImageCreateWithImageInRect(CGImageRef image, CGRect rect)
  • 截取mask图像的某一区域重绘
CGImageRef CGImageCreateWithMask(CGImageRef image, CGImageRef mask)
  • 通过颜色分量数组创建位图
CGImageRef CGImageCreateWithMaskingColors(CGImageRef image,  const CGFloat components[])
  • 通过颜色空间模式复制位图
CGImageRef CGImageCreateCopyWithColorSpace(CGImageRef image, CGColorSpaceRef space)
  • 引用+1 -1
CGImageRef CGImageRetain(CGImageRef image)
void CGImageRelease(CGImageRef image)

最后必须要调用CGImageRelease释放位图对象否则会造成内存泄露

  • 返回是否为Mask图层
bool CGImageIsMask(CGImageRef image)
  • 获取相应属性
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与UIImage互转

UIImage虽然可以加载、显示各种格式的位图,甚至可以同时加载图片,接下来依次播放多张图片形成动画.但UIImage的功能依然有限,它不能对图片进行缩放、旋转,不能”挖取”源图片的指定区域等,这些功能可借助Quartz 2D的CGImageRef来实现.实际运用中我们就需要UIImage与CGImageRef之间相互转换,方法如下

//CGImageRef  转换成UIImage  

CGImageRef cgRef= CGBitmapContextCreateImage(context);  
UIImage* image = [UIImage imageWithCGImage: cgRef];  


//UIImage转换成CGImageRef  

UIImage *uiImage = [UIImage imageNamed:@"abc.png"];  
CGImageRef cgRef1 = uiImage.CGImage;  
移动端安全实战:如何用Unidbg动态分析小红书so加密协议(附CRC32校验破解) 本文深入解析小红书移动端so加密协议,通过Unidbg框架实现动态分析,重点破解CRC32校验与白盒AES算法。文章提供从环境搭建到协议逆向的全流程实战指南,涵盖SO文件反混淆、动态Hook技术及加密算法破解,为移动安全工程师提供高效分析方案。 阅读详情

相关推荐

java链接opc报异常org.jinterop.dcom.common.JIException: Access is denied解决

记录一下这次从发现问题到解决问题的过程 项目是通过java链接OPC,读取数据,并且发送数据的 程序一直运行正常,最近客户反馈说无法读取数据,通过查看,发现访问异常了。花了2天的时间才解决了这个异常。 org.jinterop.dcom.common.JIException: Access is denied, please check whether the [domain-username-password] are correct. Also, if not already done please c

机器学习菜鸟 1万+

iOS图片处理1---CGImageRef基本概念

最近遇到一个问题,需要对相机拍摄完的照片进行处理,达到一定的标准。所以研究一下图片、位图、像素这些,也找到了一些文章,研究学习一下。 一、位图基本概念---CGImageRef CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写。 typedef struct CGImage *CGImageRef; CGImageRef ,这个结构用来创建像...

小天空的博客 1542

NSGA-III相关笔记

NSGA-III目录目的区别NSGA-III的算法流程非支配排序详解归一化详解 目录 NSGA-III基于matlab的实现 参考文献 1.An Evolutionary Many-Objective Optimization Algorithm Using Reference-point Based Non-dominated Sorting Approach,Part I: Solving P...

weixin_42555400的博客 1万+

使用CGImageRef创建图片及实现图片区域裁剪(附源码)

CGImageRef使用,图片裁剪

mumubumaopao的博客 1234

CODESYS V3.5 SP17编程环境全攻略:从安装到多语言编程实战

本文全面解析CODESYS V3.5 SP17编程环境,从安装配置到多语言编程实战技巧。详细介绍了运行时环境设置、六种IEC 61131-3语言的特性对比与混合编程策略,以及高级功能开发如自定义算法模块和实时通信配置。适合工业自动化工程师快速掌握这一强大工具。

weixin_30632089的博客 489

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1238

关于CGImageRef

一、概念 1)NSImage 是一个抽象类,它能代表各种图像类型,同时也能定义各种图像。通常,大家如果对图像的类型不在意的话,NSImage是很好用的。同时,他也是Appkit唯一能接受的图像类,至少到目前为止是这样。(Appkit , UIKit 是iphone里界面,UI的库) 2)CGImage只能代表bitmaps。如果你像直接和bitmap 数据打交道,CGImage是很好的

Benson的学习笔记 3497

RPN 解析

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络; 1. RPN的意义 RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Se

lanran2的博客 10万+

避免在ARC下使用 CGImageRef 导致内存泄漏

// 高斯模糊背景图 -(void)gaositu:(UIImage*)image{ dispatch_async(dispatch_get_global_queue(0, 0), ^{ CIContext *context = [CIContext contextWithOptions:nil]; CIImage *ciImage = ...

Pandakingli的博客 1655

在VSCode中使用LaTex+(grammarly语法检测,chatgpt翻译,Sumatra PDF 轻量级pdf阅读器)

整个文章分为以下几个内容,打 * 的是必须要安装的。

u011895157的博客 2万+

【时间序列预测算法】——Holt-Winters算法介绍及代码实现

背景 一阶二阶三阶指数平滑方法拟合效果均较好,通过结合数据自然属性,数据自身、趋势变化、季节性,提出了这三个角度的衡量量,可以说,理解起来更自然、更亲切。 公式 一阶: sts_tst​是t时刻对xtx_txt​的估计值,这里只有一个参数α,是数据本身的平滑属性的体现。 二阶: 引入了时间趋势变量btb_tbt​,优化了一下一阶的公式。同时还可以预测t+m时刻的值: 三阶: 又引入了季节性周期描述变量ctc_tct​,优化了一下二阶的公式。同时还可以预测t+m时刻的值: NOTE:ct

BlackValley的博客 1万+

CGImageRef像素位图参数说明

iOS中对图片进行重绘处理的方法总结一、CGImageRef是什么CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写。在CGImage.h文件中,我们可以看到下面的定义:typedef struct CGImage *CGImageRef;CGImageRef 和 struct CGImage * 是完全等价的。这个结构用来创建像素位图,可以通过操作存储的像素位来

加勒比海兔的专栏 1651

成功解决raise Py4JError py4j.protocol.Py4JError: py4j.protocol.Py4JError: Could not find py4j jar at 

成功解决raise Py4JError("Could not find py4j jar at {0}".format(jarpath)) py4j.protocol.Py4JError: Could not find py4j jar at 目录 解决问题 解决思路 解决方法 1、第一步安装jdk 2、第二步安装或升级py4j 解决问题 raise Py4JError("Could not find py4j jar at {0...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4624

(ios)UIImage,CGImage和CGImageRef之间的转化

CGImage和CGImageRef这两个应当是用来重绘图形的类,它们在应用时是按照图像的像素矩阵来绘制图片的,它们可以用来处理bitmap。 CGImageRef与UIImage的互转   CGImageRef转换成UIImage CGImageRef iOffscreen = CGBitmapContextCreateImage(context); UIImage

likandmydeer的专栏 2875

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

五种创建UIImage的类方法

文/李刚(简书作者) 原文链接:http://www.jianshu.com/p/69f08e0cd49b 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 UIImage有五个类方法,用来创建UIImage的。下面介绍一下每个类方法的作用和创建实例。 1.使用类方法imageNamed:创建 + (UIImage *)imageNamed:(NSString *)na

iOS技术分享与学习博客 588

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

iOS开发五种创建UIImage的类方法

UIImage有五个类方法,用来创建UIImage的。下面介绍一下每个类方法的作用和创建实例。  1.使用类方法imageNamed:创建  + (UIImage *)imageNamed:(NSString *)name; // load from main bundle  name是照片名称。创建UIImage对象,代码如下:  UIImage *image = [UIImage i...

balongzang9495的博客 205

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

由_layer.contents = (__bridge id)image.CGImage想到的

UIImage *image = [UIImage imageNamed:@"xxx.png"] ; _layer.contents = (__bridge id)image.CGImage ;这句代码非常熟悉,我经常用到,曾经怀疑要不要保持image不要其被释放,不然image.CGImage就会被释放了,然后他不会,因为在CALayer里,contents被定义成@property(strong

KudoCC的专栏 2071

iOS 绘图之drawImage

iOS 绘图

Love@YR 2928

CGImage转换

CGImage和CGImageRef这两个应当是用来重绘图形的类,它们在应用时是按照图像的像素矩阵来绘制图片的,它们可以用来处理bitmap。CGImageRef与UIImage的互转CGImageRef转换成UIImage CGImageRefiOffscreen = CGBitmapContextCreateImage(context);UIImage* p_w_picp...

weixin_34107739的博客 187

iOS开发UI篇—CAlayer(创建图层)

iOS开发UI篇—CAlayer(创建图层) 一、添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控制器view的layer上) 1 // 2 // YYViewController.m 3 // 01-创建一个简单的图层 4 // 5 // ...

aaa1231722的博客 72

CGImageRelease注意事项

在使用CGImageRelease时应注意的事项: 在CFRelease的解释中,提到要release的对象不能是NULL,若是NULL的话,会引起runtime的错误并且程序将要crash。并且使用release后,程序并非直接就release了对象,一般都是有延迟的,所以在第一次调用时表面上是正常的,但到第二次时就崩溃了,可见这个崩溃实际上是第一次的延迟释放对象造成的。而更直接的原因在于CG

不一样的焰火 1649

iOS开发Debug之内存释放(C-types)

ARC下不是什么东西都能自动释放的。比如C-types的对象就无法自动释放,需要手动释放。例: UIImage* image = [UIImage imageWithCGImage:mageRef]; CGImageRelease(ImageRef); UIGraphicsEndImageContext();

十万个逗的博客 467

对接门禁分享门禁二维码图片报错

  咳咳,好久没更新博客了,身为一个ios程序员,懒成这样,真的是无药可救。这一年遇的坑解决了也没发上博客,真是耻辱啊。但是,今天这个通过友盟分享图片分享不出去的这个坑埋完后一定要发出来,免得后来者又入坑。   1.入坑条件:   (1)首先你想自己通过字符串生成图片;(本人是通过对接门禁返回的二维码字符串生成图片)   (2)然后你就网上百度了生成图片或二维码的方法,生成CIIm...

weixin_30412577的博客 131

UIImage与CGImage的相关知识点总结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33774615的博客 339
上一篇: iOS 中的 imageIO 与 image 解码
下一篇: 使用 SDWebImage pod install 因为 libwebp 初始化不成功问题处理
Philm_iOS
博客等级 码龄8年 74粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值