1

我正在尝试更改使用 CG 绘制的矩形的宽度和颜色。在下面的函数中,我用不同的颜色遮盖了图像,但是如何更改宽度?

- (void)colorImage:(UIImage *)origImage withColor:(UIColor *)color withWidth:(float) width
{
UIImage *image = origImage;
NSLog(@"%f", width);
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, width);
CGContextClipToMask(context, rect, image.CGImage);
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImage *flippedImage = [UIImage imageWithCGImage:img.CGImage
                                            scale:1.0 orientation:          UIImageOrientationDownMirrored];

self.image = flippedImage;
}
4

1 回答 1

8

您使用 设置线宽CGContextSetLineWidth(context, width)

您没有看到任何效果的原因是因为您没有抚摸任何东西。线宽适用于通过描边绘制的线条。您正在填充,而不是抚摸,并且填充没有可以赋予宽度的线条。

如果要在矩形周围添加边框,则需要对其进行描边。这就是在某些形状的周边上画一条线的原因。

你有三个选择:

  • 打电话CGContextSetLineWidth,然后CGContextStrokeRect
  • 打电话CGContextStrokeRectWithWidth
  • 调用CGContextSetLineWidth, 然后CGContextAddRect(将矩形添加到当前路径),然后CGContextDrawPath调用kCGPathFillStroke. (或者如果您愿意,也可以AddRect在之前调用SetLineWidth——它们只需要在之前发生DrawPath。)

请注意,笔划以路径轮廓为中心,因此一半在路径/矩形内部,一半在外部。如果你的线是 1 像素宽,这将显示为半透明的线(因为没有其他方法可以表示“半像素”)。如果您的线条是偶数个像素宽,并且您划过上下文(或视图)的整个边界,您将只能看到内部线条的一半。

您还应该确定您是否真的要填充,或者仅中风是否是您想要的。

于 2013-06-17T02:43:10.420 回答