iOS开发CGImage.h简介
1、前因
由于剪切图片用到下面方法,此方法属于CGImage.h中,通过创建CGImageRef像素位图,可以通过操作存储的像素位来编辑图片。
/* Create an image using the data contained within the subrectangle `rect'
of `image'.
截取图像的一个区域重绘图像*/
CG_EXTERN CGImageRef __nullable CGImageCreateWithImageInRect(
CGImageRef cg_nullable image, CGRect rect)
效果图展示:

代码展示:
UIImage *bgImage =[UIImage imageNamed:@""];
// 上半部
UIImageView *topImgView = [[UIImageView alloc] initWithFrame:CGRectMake(, , CScreenWidth, (CScreenHeight-) * 0.5)];
topImgView.image = [self clipImage:bgImage withRect:CGRectMake(, , imageW, imageH)];
// 下半部
UIImageView *bottomImgView = [[UIImageView alloc] initWithFrame:CGRectMake(, +(CScreenHeight-) * 0.5, CScreenWidth, (CScreenHeight-) * 0.5)];
bottomImgView.image = [self clipImage:bgImage withRect:CGRectMake(, imageH, imageW, imageH)];
[self.view addSubview:topImgView];
[self.view addSubview:bottomImgView];
CGAffineTransform transform = CGAffineTransformIdentity;
transform =CGAffineTransformScale(transform, ., .);
[UIView animateWithDuration:2.0f animations:^{
CGRect topRect = topImgView.frame;
topRect.origin.x -= CScreenWidth;
topImgView.frame = topRect;
topImgView.transform = transform;
CGRect bottomRect = bottomImgView.frame;
bottomRect.origin.x += CScreenWidth;
bottomImgView.frame = bottomRect;
bottomImgView.transform = transform;
} completion:^(BOOL finished) {
[topImgView removeFromSuperview];
[bottomImgView removeFromSuperview];
}];
- (UIImage *)clipImage:(UIImage *)image withRect:(CGRect)rect {
CGRect clipFrame = rect;
CGImageRef refImage = CGImageCreateWithImageInRect(image.CGImage, clipFrame);
UIImage *newImage = [UIImage imageWithCGImage:refImage];
CGImageRelease(refImage);
return newImage;
}
2、CGImage.h文件方法简介
typedef CF_ENUM(uint32_t, CGImageAlphaInfo) {
kCGImageAlphaNone, /* For example, RGB. */
kCGImageAlphaPremultipliedLast, /* For example, premultiplied RGBA */
kCGImageAlphaPremultipliedFirst, /* For example, premultiplied ARGB */
kCGImageAlphaLast, /* For example, non-premultiplied RGBA */
kCGImageAlphaFirst, /* For example, non-premultiplied ARGB */
kCGImageAlphaNoneSkipLast, /* For example, RBGX. */
kCGImageAlphaNoneSkipFirst, /* For example, XRGB. */
kCGImageAlphaOnly /* No color data, alpha data only */
};
typedef CF_ENUM(uint32_t, CGImageByteOrderInfo) {
kCGImageByteOrderMask = 0x7000,
kCGImageByteOrderDefault = ( << ),
kCGImageByteOrder16Little = ( << ),
kCGImageByteOrder32Little = ( << ),
kCGImageByteOrder16Big = ( << ),
kCGImageByteOrder32Big = ( << )
} CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
typedef CF_OPTIONS(uint32_t, CGBitmapInfo) {
kCGBitmapAlphaInfoMask = 0x1F,
kCGBitmapFloatInfoMask = 0xF00,
kCGBitmapFloatComponents = ( << ),
kCGBitmapByteOrderMask = kCGImageByteOrderMask,
kCGBitmapByteOrderDefault = kCGImageByteOrderDefault,
kCGBitmapByteOrder16Little = kCGImageByteOrder16Little,
kCGBitmapByteOrder32Little = kCGImageByteOrder32Little,
kCGBitmapByteOrder16Big = kCGImageByteOrder16Big,
kCGBitmapByteOrder32Big = kCGImageByteOrder32Big
} CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
#ifdef __BIG_ENDIAN__
# define kCGBitmapByteOrder16Host kCGBitmapByteOrder16Big
# define kCGBitmapByteOrder32Host kCGBitmapByteOrder32Big
#else /* Little endian. */
# define kCGBitmapByteOrder16Host kCGBitmapByteOrder16Little
# define kCGBitmapByteOrder32Host kCGBitmapByteOrder32Little
#endif
/* Return the CFTypeID for CGImageRefs. */
CG_EXTERN CFTypeID CGImageGetTypeID(void)
/* Create an image.
width:图片宽度像素
height:图片高度像素
bitsPerComponent:每个颜色的比特数,例如在rgba-32模式下为8
bitsPerPixel:每个像素的总比特数
bytesPerRow:每一行占用的字节数,注意这里的单位是字节
space:颜色空间模式,例如const CFStringRef kCGColorSpaceGenericRGB 这个函数可以返回一个颜色空间对象。
bitmapInfo:位图像素布局
provider:数据源提供者
decode[]:解码渲染数组
shouldInterpolate:是否抗锯齿
intent:图片相关参数*/
CG_EXTERN CGImageRef __nullable CGImageCreate(size_t width, size_t height,
size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow,
CGColorSpaceRef cg_nullable space, CGBitmapInfo bitmapInfo,
CGDataProviderRef cg_nullable provider,
const CGFloat * __nullable decode, bool shouldInterpolate,
CGColorRenderingIntent intent)
/* Create an image mask.
创建mask图片图层,可以设置其显示部分与不显示部分达到特殊的效果*/
CG_EXTERN CGImageRef __nullable CGImageMaskCreate(size_t width, size_t height,
size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow,
CGDataProviderRef cg_nullable provider, const CGFloat * __nullable decode,
bool shouldInterpolate)
/* Return a copy of `image'. Only the image structure itself is copied; the
underlying data is not.
复制一个CGImageRef对象*/
CG_EXTERN CGImageRef __nullable CGImageCreateCopy(CGImageRef cg_nullable image)
/* Create an image from `source', a data provider of JPEG-encoded data.
通过JPEG数据源获取图像 */
CG_EXTERN CGImageRef __nullable CGImageCreateWithJPEGDataProvider(
CGDataProviderRef cg_nullable source, const CGFloat * __nullable decode,
bool shouldInterpolate,
CGColorRenderingIntent intent)
/* Create an image using `source', a data provider for PNG-encoded data.
通过PNG数据源获取图像 */
CG_EXTERN CGImageRef __nullable CGImageCreateWithPNGDataProvider(
CGDataProviderRef cg_nullable source, const CGFloat * __nullable decode,
bool shouldInterpolate,
CGColorRenderingIntent intent)
/* Create an image using the data contained within the subrectangle `rect'
of `image'.
截取图像的一个区域重绘图像*/
CG_EXTERN CGImageRef __nullable CGImageCreateWithImageInRect(
CGImageRef cg_nullable image, CGRect rect)
/* Create a new image from `image' masked by `mask', which may be an image
mask or an image.
截取mask图像的某个区域重绘图像 */
CG_EXTERN CGImageRef __nullable CGImageCreateWithMask(
CGImageRef cg_nullable image, CGImageRef cg_nullable mask)
/* Create a new image from `image' masked by `components'
通过颜色分量数组创建位图*/
CG_EXTERN CGImageRef __nullable CGImageCreateWithMaskingColors(
CGImageRef cg_nullable image, const CGFloat * cg_nullable components)
/* Create a copy of `image', replacing the image's color space with `space'.
Returns NULL if `image' is an image mask, or if the number of components
of `space' isn't the same as the number of components of the color space
of `image'.
通过颜色空间模式复制位图*/
CG_EXTERN CGImageRef __nullable CGImageCreateCopyWithColorSpace(
CGImageRef cg_nullable image, CGColorSpaceRef cg_nullable space)
/* Equivalent to `CFRetain(image)'.
引用计数+1*/
CG_EXTERN CGImageRef cg_nullable CGImageRetain(CGImageRef cg_nullable image)
/* Equivalent to `CFRelease(image)'.
引用计数-1*/
CG_EXTERN void CGImageRelease(CGImageRef cg_nullable image)
/* Return true if `image' is an image mask, false otherwise.
是否是mask图层 */
CG_EXTERN bool CGImageIsMask(CGImageRef cg_nullable image)
/* Return the width of `image'.
获取图像宽度像素*/
CG_EXTERN size_t CGImageGetWidth(CGImageRef cg_nullable image)
/* Return the height of `image'.
获取图像的高度像素*/
CG_EXTERN size_t CGImageGetHeight(CGImageRef cg_nullable image)
//获取图像相应属性
/* Return the number of bits/component of `image'. */
CG_EXTERN size_t CGImageGetBitsPerComponent(CGImageRef cg_nullable image)
/* Return the number of bits/pixel of `image'. */
CG_EXTERN size_t CGImageGetBitsPerPixel(CGImageRef cg_nullable image)
/* Return the number of bytes/row of `image'. */
CG_EXTERN size_t CGImageGetBytesPerRow(CGImageRef cg_nullable image)
/* Return the color space of `image', or NULL if `image' is an image
mask. */
CG_EXTERN CGColorSpaceRef __nullable CGImageGetColorSpace(CGImageRef cg_nullable image)
/* Return the alpha info of `image'. */
CG_EXTERN CGImageAlphaInfo CGImageGetAlphaInfo(CGImageRef cg_nullable image)
/* Return the data provider of `image'. */
CG_EXTERN CGDataProviderRef __nullable CGImageGetDataProvider(CGImageRef cg_nullable image)
/* Return the decode array of `image'. */
CG_EXTERN const CGFloat * __nullable CGImageGetDecode(CGImageRef cg_nullable image)
/* Return the interpolation parameter of `image'. */
CG_EXTERN bool CGImageGetShouldInterpolate(CGImageRef cg_nullable image)
/* Return the rendering intent of `image'. */
CG_EXTERN CGColorRenderingIntent CGImageGetRenderingIntent(cg_nullable CGImageRef image)
/* Return the bitmap info of `image'. */
CG_EXTERN CGBitmapInfo CGImageGetBitmapInfo(CGImageRef cg_nullable image)
/* Return the UTType of `image'. */
CG_EXTERN CFStringRef __nullable CGImageGetUTType(cg_nullable CGImageRef image)
iOS开发CGImage.h简介的更多相关文章
- iOS开发UIView.h简介
1.UICoordinateSpace不同坐标空间的坐标切换 @protocol UICoordinateSpace <NSObject> //将当前的坐标空间点转换到指定的坐标空间 - ...
- iOS开发UIEvent事件简介
1.UIEvent简介 UIEvent是代表iOS系统中的一个事件,一个事件包含一个或多个的UITouch: UIEvent分为四类: UIEventType typedef NS_ENUM(NSIn ...
- iOS开发CATransform3D.h属性详解和方法使用
1.CATransform3D简介 layer有个属性transform,是CATransform3D类型.可以使其在三维界面作平移.缩放和旋转单独或组合动画! CATransform3D结构体: / ...
- iOS开发UI篇—CALayer简介
iOS开发UI篇—CALayer简介 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...
- iOS开发UI篇—核心动画简介
转自:http://www.cnblogs.com/wendingding/p/3801036.html iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画 ...
- iOS开发多线程篇—多线程简介
iOS开发多线程篇-多线程简介 一.进程和线程 1.什么是进程 进程是指在系统中正在执行的一个应用程序 每一个进程之间是独立的.每一个进程均执行在其专用且受保护的内存空间内 比方同一时候打开QQ.Xc ...
- XMPPFrameWork IOS 开发(一)xmpp简介
原始地址:XMPPFrameWork IOS 开发(一) XMPP : The Extensible Messaging and Presence Protocol 中文全称: 可扩展通讯和表示协议 ...
- iOS开发中KVC、KVO简介
在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 ...
- iOS开发多线程篇—GCD简介
iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...
随机推荐
- js实现图片资源、blob、base64的各种场景转换
文件转babase64 function getImgToBase64(url,callback){//将图片转换为Base64 var canvas = document.createElement ...
- 2018-10-29-微软-Tech-Summit-技术暨生态大会课程-·-基于-Roslyn-打造高性能预编译框架...
title author date CreateTime categories 微软 Tech Summit 技术暨生态大会课程 · 基于 Roslyn 打造高性能预编译框架 lindexi 2018 ...
- windows下 Mysql 8.0.x 数据库简单的导出和导入!!!
1.首先需要进入到mysql安装目录下的bin目录,执行cmd进入命令窗口. 2.导出(导出某个数据库,也可以针对某张表导出)2.1导出数据结构以及数据的命令: mysqldump -u root - ...
- H5点击拨打电话,发短信
phone(){ window.location.href = 'tel:123123'// 拨打电话 window.location.href = 'sms:123123'// 发短信 }
- 5.从物理层到MAC层
第一层(物理层) 如何用两台电脑构成最小的局域网(LAN)? 网线的水晶头1.2和3.6脚分别起着收.发信号的作用,随意只要将水晶头做交叉线1-3.2-6交叉法,然后连接两台电脑.除了 ...
- 帆软报表PC端实施报表心得体会
1.报表制作完成后,预览时自动显示查询内容,在控件处设置: 2.求一列数据的最小值(除去0),并对最小值字体加粗标绿,需要对对应单元格设置条件属性,并插入公式:C6 = min(greparray(C ...
- CSS-基本语法/引用/文本设置/选择器/css3属性
CSS-基本语法/引用/文本设置 css基本语法及页面引用 css基本语法 css的定义方法是: 选择器 { 属性:值; 属性:值; 属性:值;} 选择器是将样式和页面元素关联起来的名称,属性是希望设 ...
- 1003CSP-S模拟测试赛后总结
我是垃圾……我只会骗分. 拿到题目通读一遍,感觉T3(暴力)是个树剖+线段树. 刚学了树刨我这个兴奋啊.然而手懒决定最后再说. 对着T1一顿yyxjb码了个60pts的测试点分治就失去梦想了.(顺便围 ...
- kubernetes监控和性能分析工具:heapster+influxdb+grafana
1.部署heapster 下载 heapster 相关 yaml 文件 [root@master dashboard]# wget https://raw.githubusercontent.com/ ...
- 常用css初始化样式(淘宝)
最简单粗暴的css初始化样式就是:*{padding:0:margin:0}(不推荐) 淘宝的样式初始化: body, h1, h2, h3, h4, h5, h6, hr, p, blockquot ...