-1

以下是我使用 CGContext 进行自由手绘的代码。我想使用 alpha 值为 0.6 的颜色和混合模式为kCGBlendModeColor. 但是在绘图时,我得到以下效果:颜色重叠并变暗。我想要不重叠和平滑的绘制。

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  {

   UITouch *touch = [touches anyObject];
   lastTouch = [touch locationInView:self];
 }

 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint   currentTouch = [touch locationInView:self];

CGFloat brushSize = 35;

UIColor *color = [UIColor blueColor];
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0;

if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) {
    [color getRed:&red green:&green blue:&blue alpha:&alpha];
} else {
    const CGFloat *components = CGColorGetComponents(color.CGColor);
    red = components[0];
    green = components[1];
    blue = components[2];
    alpha = components[3];
}

UIGraphicsBeginImageContext(self.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, brushSize);

CGContextSetRGBStrokeColor(context, red, green, blue, 0.6) ;
CGContextSetBlendMode(context, kCGBlendModeColor);

CGContextBeginPath(context);
CGContextMoveToPoint(context, lastTouch.x, lastTouch.y);
CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y);
CGContextStrokePath(context);
self.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastTouch = [touch locationInView:self];

 }

在此处输入图像描述

4

2 回答 2

1

如果你真的想画干净流畅的手绘图,用OpenGL,我也用过这个,真的很好。

按照这个链接

http://developer.apple.com/library/ios/#samplecode/GLPaint/Introduction/Intro.html

希望这可以帮助你:)

于 2012-10-04T10:23:42.723 回答
0

这可能不是您想要做的,但一种可能的解决方案是将完整的 alpha 绘制到您创建的“额外”子视图中,然后将其 alpha 值设置为 0.6。

换句话说,使用 1.0 alpha 进行绘制,但在 alpha 值为 0.6 的视图中绘制。

当您在之前的绘图上着色时,这应该可以防止出现可见的效果,同时仍然保留您想要的 Alpha 效果。

祝你好运!希望有帮助。

于 2012-09-30T06:36:36.497 回答