我正在尝试更改使用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;
}
答案 0 :(得分:8)
您可以使用CGContextSetLineWidth(context, width)
设置线宽。
你之所以没有看到效果,是因为你没有抚摸任何东西。线宽适用于通过描边绘制的线条。你正在填充,而不是抚摸,并且填充没有线来给予宽度。
如果要在矩形周围放置边框,则需要对其进行描边。这就是在某个形状的周边画一条线的原因。
您有三种选择:
CGContextSetLineWidth
,然后致电CGContextStrokeRect
。CGContextStrokeRectWithWidth
。CGContextSetLineWidth
,然后调用CGContextAddRect
(将矩形添加到当前路径),然后调用CGContextDrawPath
kCGPathFillStroke
。 (或者如果您愿意,可以在AddRect
之前致电SetLineWidth
- 他们只需要在DrawPath
之前发生。)请注意,笔划以路径轮廓为中心,因此其中一半位于路径/矩形内,一半位于路径外。如果你的线是1像素宽,这将显示为半透明的线(因为没有其他方式来表示“半像素”)。如果你的线是一些偶数个像素宽,并且你描边上下文(或视图)的整个边界,你只会看到内线的一半。
你也应该决定你是否真的要填补,或者你是否只想要中风。