如何擦除UIImage的一部分

时间:2010-12-24 12:32:24

标签: iphone objective-c ipad uiimageview uiimage

有没有办法擦除该图像的黑色背景 alt text

我在topic找到了此示例代码,但我不明白它是如何工作的

- (void)clipImage {
  UIImage *img = imgView.image;
  CGSize s = img.size;
  UIGraphicsBeginImageContext(s);
  CGContextRef g = UIGraphicsGetCurrentContext();
  CGContextAddPath(g,erasePath);
  CGContextAddRect(g,CGRectMake(0,0,s.width,s.height));
  CGContextEOClip(g);
  [img drawAtPoint:CGPointZero];
  imageView.image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
}

也许我的方式错了。

的问候,
kl94

2 个答案:

答案 0 :(得分:4)

代码使用石英(iPhone的图形引擎)剪辑图像。一些细节:

UIGraphicsBeginImageContext(s);
CGContextRef g = UIGraphicsGetCurrentContext();

你首先需要某种“目标”来吸引。在图形中,通常称为上下文。在上面,您告诉系统需要具有给定大小的(位图)图像上下文,然后您可以获得对它的引用。

CGContextAddPath(g,erasePath);
CGContextAddRect(g,CGRectMake(0,0,s.width,s.height));
CGContextEOClip(g);

在这里,您提供上下文的路径,然后剪切上下文。这就是说“只在这些地区画画。”

[img drawAtPoint:CGPointZero];

您在新上下文中绘制图像。只会绘制剪切区域,因此其余区域将被有效删除。

imageView.image = UIGraphicsGetImageFromCurrentImageContext();

现在,您只需要让系统返回您在上面设置的上下文(目标)中绘制的图像

注意:这是一个粗略的描述,您可能希望查看每个函数的参考以获取更多详细信息。

答案 1 :(得分:0)

以下是获取“erasePath”的方法。只需将要裁剪的选定CGRect传递为“cropRect” -

CGMutablePathRef erasePath = CGPathCreateMutable();
CGPathAddRect(erasePath, NULL, cropRect);
CGContextAddPath(g,erasePath);