`
374016526
  • 浏览: 95411 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOS 画出不规则图形

阅读更多

以下为大家提供一种绘制不规则图形的方法,实现原理利用图像的遮盖。

 

//// 这种是路径遮盖法

+ (UIImage*)maskImage:(UIImage*)originImage toPath:(UIBezierPath*)path

{

    UIGraphicsBeginImageContextWithOptions(originImage.size, NO, 0);

    [path addClip];

    [originImage drawAtPoint:CGPointZero];

    UIImage* img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;

}

 

 

 

 

////为图像创建透明区域

+ (CGImageRef)CopyImageAndAddAlphaChannel:(CGImageRef)sourceImage

{

    CGImageRef retVal = NULL;

    

    size_t width = CGImageGetWidth(sourceImage);

    size_t height = CGImageGetHeight(sourceImage);

    

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    

    CGContextRef offscreenContext = CGBitmapContextCreate(NULL, width, height,

                                                          8, 0, colorSpace,

                                                          kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little);

    

    if (offscreenContext != NULL)

    {

        CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), sourceImage);

        retVal = CGBitmapContextCreateImage(offscreenContext);

        CGContextRelease(offscreenContext);

    }

    

    CGColorSpaceRelease(colorSpace);

    

    return retVal;

}

 

/////利用图像遮盖

+ (UIImage*)maskImage:(UIImage *)image withMask:(UIImage *)maskImage

{

CGImageRef maskRef = maskImage.CGImage;

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),

                                        CGImageGetHeight(maskRef),

                                        CGImageGetBitsPerComponent(maskRef),

                                        CGImageGetBitsPerPixel(maskRef),

                                        CGImageGetBytesPerRow(maskRef),

                                        CGImageGetDataProvider(maskRef), NULL, true);

 

CGImageRef sourceImage = [image CGImage];

CGImageRef imageWithAlpha = sourceImage;

    

//add alpha channel for images that don't have one (ie GIF, JPEG, etc...)

//this however has a computational cost

if (CGImageGetAlphaInfo(sourceImage) == kCGImageAlphaNone) {

imageWithAlpha = [ImageUtil CopyImageAndAddAlphaChannel:sourceImage];

}

 

CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask);

CGImageRelease(mask);

 

//release imageWithAlpha if it was created by CopyImageAndAddAlphaChannel

    if (sourceImage != imageWithAlpha) {

        CGImageRelease(imageWithAlpha);

    }

 

UIImage* retImage = [UIImage imageWithCGImage:masked];

CGImageRelease(masked);

 

return retImage;

 

}

0
0
分享到:
评论
1 楼 softlanh 2014-05-19  
如果我用第一种方法截取一个不规则图形,截取后只保留需要的截取后的图怎么处理

相关推荐

    iOS 绘制不规则图形,并且添加点击事件

    iOS 绘制不规则图形,并且添加点击事件

    iOS开发 不规则图形点击

    当需要在不规则图形内实现点击事件时可以尝试一下这种方法 黑色部分为不规则部分 主要代码在根控制器上

    iOS绘制不规则图形,并且添加点击事件

    iOS绘制不规则图形,并且添加点击事件。用贝塞尔曲线绘制的。很简单,下载后就会咯。

    iOS 绘制不规则图形,不错的添加点击事件的两种方法

    iOS 绘制不规则图形,不错的添加点击事件的两种方法,

    iOS 绘制不规则图形,并且添加点击事件 的两种方法

    iOS 绘制不规则图形,并且添加点击事件 的两种方法

    IOS drawRect 自定义绘图,自定义任意类型的图形和动画

    覆盖drawRect方法,你可以在此自定义绘画和动画,随意绘制自己想要的图像,矩形,长方形,边框圆,填充圆,无边框,弧线,椭圆,画贝塞尔曲线

    绘画九宫格跳转

    iOS绘画功能,绘制图形,和不规则九宫格的逻辑处理,两个app跳转

    c语言跨平台图形渲染库GBOX.zip

    现在这个项目,正处于早期开发阶段,暂不提供使用,仅供参考学习   在线源码 项目主页 更多项目   如果您感兴趣,可以阅读源码,目前已实现的功能: 矢量2d渲染,支持矩阵变换,画刷、画笔的设置和...

    美图秀秀拼图Demo(iOS源码)

    来源:Licence:MIT作者:依晨易成  模拟美图秀秀拼图功能,支持图片自由拖动,添加边框,以及不规则图形的切割。 小编注:十分不错的拼图功能实现。感谢开发者@依晨易成 。

    轻量化渲染系统 SimLab Composer 10.9 x64 中文多语免费版.zip

    通过simlab,您可以和任何人在任何硬件环境下分享3D模型、交互规则和相关工作模板,simlab将采取最安全、简便的方式来实现,比如通过3D-PDF文件、WebGL、IOS/安卓等轻量化方式,在这种方式下,其余参与方并不需要再...

    轻量化渲染系统 SimLab Composer 10.9 x64 中文多语版.zip

    通过simlab,您可以和任何人在任何硬件环境下分享3D模型、交互规则和相关工作模板,simlab将采取最安全、简便的方式来实现,比如通过3D-PDF文件、WebGL、IOS/安卓等轻量化方式,在这种方式下,其余参与方并不需要再...

    nanovgXC:轻量级矢量图形库,在OpenGL中实现精确覆盖抗锯齿

    nanovgXC是一个基于用于渲染矢量图形的小型库。 该API与nanovg几乎完全相同; 面向用户的主要更改是: 使用“精确覆盖”抗锯齿渲染任意路径 不必指定每个子路径围成一个实心区域还是一个Kong 包括非常细(只有几个...

    java开源包1

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包11

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包2

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包3

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包6

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包5

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包10

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包4

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

Global site tag (gtag.js) - Google Analytics