以下为大家提供一种绘制不规则图形的方法,实现原理利用图像的遮盖。
//// 这种是路径遮盖法
+ (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;
}
相关推荐
iOS 绘制不规则图形,并且添加点击事件
当需要在不规则图形内实现点击事件时可以尝试一下这种方法 黑色部分为不规则部分 主要代码在根控制器上
iOS绘制不规则图形,并且添加点击事件。用贝塞尔曲线绘制的。很简单,下载后就会咯。
iOS 绘制不规则图形,不错的添加点击事件的两种方法,
iOS 绘制不规则图形,并且添加点击事件 的两种方法
覆盖drawRect方法,你可以在此自定义绘画和动画,随意绘制自己想要的图像,矩形,长方形,边框圆,填充圆,无边框,弧线,椭圆,画贝塞尔曲线
iOS绘画功能,绘制图形,和不规则九宫格的逻辑处理,两个app跳转
现在这个项目,正处于早期开发阶段,暂不提供使用,仅供参考学习 在线源码 项目主页 更多项目 如果您感兴趣,可以阅读源码,目前已实现的功能: 矢量2d渲染,支持矩阵变换,画刷、画笔的设置和...
来源:Licence:MIT作者:依晨易成 模拟美图秀秀拼图功能,支持图片自由拖动,添加边框,以及不规则图形的切割。 小编注:十分不错的拼图功能实现。感谢开发者@依晨易成 。
通过simlab,您可以和任何人在任何硬件环境下分享3D模型、交互规则和相关工作模板,simlab将采取最安全、简便的方式来实现,比如通过3D-PDF文件、WebGL、IOS/安卓等轻量化方式,在这种方式下,其余参与方并不需要再...
通过simlab,您可以和任何人在任何硬件环境下分享3D模型、交互规则和相关工作模板,simlab将采取最安全、简便的方式来实现,比如通过3D-PDF文件、WebGL、IOS/安卓等轻量化方式,在这种方式下,其余参与方并不需要再...
nanovgXC是一个基于用于渲染矢量图形的小型库。 该API与nanovg几乎完全相同; 面向用户的主要更改是: 使用“精确覆盖”抗锯齿渲染任意路径 不必指定每个子路径围成一个实心区域还是一个Kong 包括非常细(只有几个...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...