-1

以下は、CGContext を使用したフリーハンド描画のコードです。アルファ値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

これはやりたいことではないかもしれませんが、考えられる解決策の 1 つは、完全なアルファを使用して、作成した「追加の」サブビューに描画し、そのアルファ値を .6 に設定することです。

つまり、アルファ 1.0 で描画しますが、アルファ値 .6 でビューに描画します。

これにより、目的のアルファ効果を保持しながら、前の描画の上に色を付けたときに目に見える効果が防止されます。

幸運を!それが役立つことを願っています。

于 2012-09-30T06:36:36.497 に答える