`
374016526
  • 浏览: 98362 次
  • 性别: 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中,我们可以使用`UIBezierPath`(Foundation框架的Objective-C版本)或`CGPath`(Core Graphics框架的Swift版本)来创建不规则图形。 创建不规则图形的基本步骤如下: 1. **初始化BezierPath对象**:首先,...

    iOS开发 不规则图形点击

    在iOS开发中,有时我们可能需要为用户界面中的不规则图形添加点击事件,例如一个复杂的形状或者自定义的图标。这种需求通常出现在我们希望用户能够交互的特定区域内,而这个区域不是一个标准的矩形或圆形。本文将...

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

    在iOS开发中,绘制不规则图形并为其添加点击事件是一项常见的需求,特别是在创建自定义UI或者游戏场景时。本文将详细介绍两种实现这一功能的方法,主要涉及`Core Graphics`框架中的`BezierPath`类以及事件处理。 一...

    IOS 不规则按钮实现方法

    "IOS 不规则按钮实现方法"主要涉及到自定义按钮和图形绘制技术,通过给定的文件名可以推测出这是一种通过Category(分类)扩展UIImage和UIButton类来实现的方法。接下来,我们将深入探讨这一实现过程。 首先,...

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

    在iOS开发中,有时我们需要创建不规则图形,例如自定义的按钮、形状或者动画效果,这时我们可以利用Core Graphics框架中的Bezier路径(Bezier Path)来实现。贝塞尔曲线是一种平滑曲线,广泛应用于图形设计和计算机...

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

    在iOS开发中,有时我们需要创建不规则图形,例如自定义的按钮、形状或者地图上的标记等。这些不规则图形的绘制通常通过Core Graphics框架来实现,特别是使用`UIBezierPath`类。`UIBezierPath`提供了强大的功能,可以...

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

    在iOS开发中,自定义绘图是实现独特视觉效果和高效性能的重要手段。`drawRect:` 方法是UIKit框架中一个核心的绘图接口,它允许开发者覆盖默认的视图渲染行为,实现自己的图形绘制逻辑。这个方法在`UIView`类中定义,...

    ios-不规则四边形截取.zip

    总之,“ios-不规则四边形截取.zip”项目涵盖了iOS中核心的图形绘制和手势识别技术,这些知识点对于开发具有高级交互功能的应用至关重要。通过理解并掌握这些内容,开发者可以创建出更加丰富、个性化的用户体验。

    ios各种动画效果

    Core Animation是Apple提供的一套强大的2D图形渲染和动画框架,它允许开发者创建平滑、高性能的动画。通过CALayer对象,我们可以对视图的属性如位置、大小、透明度等进行动画操作。例如,我们可以使用`UIView....

    iOS 心电图绘画

    9. **测试与调试**:在开发过程中,进行真机测试和模拟器测试是必不可少的,确保心电图在不同设备和iOS版本上都能正常工作。Xcode的调试工具可以帮助定位和解决问题。 综上所述,开发一个iOS心电图绘画应用涵盖了...

    ios-利用OBShapedButton实现不规则按钮的方法.zip

    在iOS开发中,有时我们需要创建形状不规则的按钮,以满足特定界面设计或功能需求,如地图选择区域、智能导诊等。在这种情况下,利用第三方库OBShapedButton可以非常方便地实现这样的效果。OBShapedButton是一个强大...

    iOS 动画CoreAnimation

    通过以上对iOS Core Animation高级技巧的解析,我们可以看出,Core Animation不仅仅是动画技术,它还包含了广泛的图形管理和渲染技术。理解这些基础知识对于开发高质量的应用程序至关重要。无论是基础的布局管理还是...

    爱心的不规则上升动画效果

    综上所述,"爱心的不规则上升动画效果"是一个结合了用户交互、图形绘制、动画控制和路径规划的综合技术实现。它体现了开发者对用户体验的细致考虑,以及对动画技术的深入理解和应用。通过不断学习和实践,开发者可以...

    ios 重力 弹性动画

    在iOS开发中,实现引人入胜的用户体验往往离不开动态效果,尤其是重力和弹性动画。这类动画可以模拟现实世界中的物理现象,如物体下落、弹跳等,为用户带来更加直观和自然的交互感受。本文将深入探讨如何在iOS应用中...

    iOS动画高级技巧

    - **图层蒙版**:限制图层的可视范围,通常用于创建不规则形状的图层。 - **拉伸过滤**:指定图层如何处理超出边界的内容。 - **组透明**:控制图层内部的透明度。 **使用图层** 使用`CALayer`的关键在于理解它与`...

    不规则形状控件的制作

    在iOS开发中,我们可以使用Swift或Objective-C,利用`UIView`的子类和`CALayer`来创建不规则形状。在`draw(_ rect:)`方法中,使用`CGContext`进行绘图,同样调用`addEllipse(in:)`或`addPath()`方法。对于交互,可以...

    ios-不规则按钮的实现.zip

    在iOS开发中,创建不规则形状的按钮是一个挑战,因为标准的UIButton类只提供矩形或椭圆形的形状。然而,通过使用自定义视图和绘图技术,开发者可以实现各种复杂的按钮形状。这里我们将深入探讨如何实现不规则按钮,...

    cocos creator 不规则形状按钮

    在Cocos Creator游戏开发中,创建不...总结来说,利用Cocos Creator和Gizmo,开发者可以轻松创建出独特且不规则形状的按钮,提高游戏的视觉效果和用户体验。通过理解并掌握这一技巧,你的游戏开发技能将更上一层楼。

    iOS Demo 心形雪花

    开发者可能使用这些工具来生成随机的x和y坐标,确保雪花在屏幕上的分布均匀且不规则。 4. **算法设计**:为了使雪花聚集形成心形,开发者需要设计一个算法来确定何时停止生成新的雪花以及如何让雪花向心形区域聚集...

    仿照ios的loading

    1. **图形动画**:iOS加载动画的核心是利用图形变换来创建动态效果。这通常涉及到旋转、缩放、平移等基本图形操作。我们可以使用SVG(Scalable Vector Graphics)格式的矢量图,以确保动画在不同分辨率设备上都能...

Global site tag (gtag.js) - Google Analytics