UIImage用另一个图像填充透明部分

时间:2014-03-25 17:32:09

标签: ios uiimage transparent fill uigraphicscontext

我想用iOS中的另一个图像填充图像的透明部分。

我已尝试使用UIGraphicsContext的一些内容,但我无法使其正常运行,因为我之前从未使用过它。

这是图片:

enter image description here

我尝试了一些代码:

UIImageView *v = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 70, 70)];

UIGraphicsBeginImageContextWithOptions(v.frame.size, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
// beach image
UIImage *img = [UIImage imageNamed:@"zivogosce_camping_05.jpg"];
//[img drawInRect:CGRectMake(2, 0, 12, 12)];

UIImage *annotationImg = [UIImage imageNamed:@"custom_annotation"];
[annotationImg drawAtPoint:CGPointMake(0, 0)];

CGContextSetFillColorWithColor(context, [[UIColor colorWithPatternImage:img] CGColor]);
CGContextFillRect(context, CGRectMake(0, 0, 50, 50));


CGContextDrawImage(context, CGRectMake(0, 0, v.frame.size.width, v.frame.size.height), [annotationImg CGImage]);



UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

[v setImage:newImage];

UIGraphicsEndImageContext();

但是图像并不适合......

1 个答案:

答案 0 :(得分:1)

这是我将如何做到的:

您可以通过执行以下操作来制作圆形的剪切路径:

CGContextSaveGState(context);
CGRect circleRect = CGRectMake(circleCenter.x - radius, circleCenter.y - radius, radius * 2.0, radius * 2.0);
CGContextAddEllipseInRect (context, circleRect);
CGContextClip(context);

// ... do whatever you need to in order to draw the inner image ...

CGContextRestoreGState(context);

// ... draw the transparent png ...

设置剪切路径将导致绘制仅发生在路径中。恢复状态时,它会删除剪切路径(或者将其设置回以前的值,通常允许它绘制到整个画布)。