更改图像颜色时更改CGContext的线宽?

时间:2013-06-16 21:25:10

标签: ios core-graphics

我正在尝试更改使用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;
}

1 个答案:

答案 0 :(得分:8)

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

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

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

您有三种选择:

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

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

你也应该决定你是否真的要填补,或者你是否只想要中风。