2

私のアプリでは、上下に2つのビューがあります。下のビューではキャプチャされた画像があり、上のビューでは画像を配置しています。ユーザーが上の画像にいくつかの変更を加える必要がある場合、私はユーザーに画像を消去するオプションを提供しています。

すべてが正常に機能しています。問題は、画像を消去しようとすると壊れているように見えることです。画像が穏やかに削除されていません。消すと下のようになります。 ここで私は消去された画像を取得します

次のようにしたい ここに画像の説明を入力してください

これを行う方法、plsは私を助けます

以下は私のコードです:

UIGraphicsBeginImageContext(frontImage.frame.size);
        [frontImage.image drawInRect:CGRectMake(0, 0, frontImage.frame.size.width, frontImage.frame.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 10);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1, 0, 0, 10);
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextClearRect (UIGraphicsGetCurrentContext(), CGRectMake(lastPoint.x, lastPoint.y, 50, 50));
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        frontImage.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
4

2 に答える 2

1

問題は、正方形のブラシを使用していて、ユーザーが描いた線上の1点でのみその正方形を消去していることです。また、あなたのストロークの色はあなたがやろうとしていることに対して完全に間違っています。

ストロークをクリアカラーに設定し、前のポイントと現在のポイントの間に線を引こうとしているようです。あなたがそれをしたいなら、あなたはこれをするべきです:

CGContextRef currCtx = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor (currCtx, 0, 0, 0, 0);
CGContextMoveToPoint (currCtx, startPt.x, startPt.y);
CGContextLineToPoint (currCtx, endPt.x, endPt.y);

この場合、startPt.x / yは前のタッチの場所であり、endPt.x/yは現在のタッチです。

投稿した画像のように線をきれいにするには、実際にアンチエイリアス処理されたテクスチャを使用して、線に沿ったすべてのポイントでサイズを変えて描画する必要があることに注意してください。しかし、上記はあなたにかなりよく見える何かを実行可能にするはずです。

于 2012-07-04T14:45:05.363 に答える
0
UIGraphicsBeginImageContext(imageView1.frame.size);
[imageView1.image drawInRect:CGRectMake(0, 0,imageView1.frame.size.width, imageView1.frame.size.height)];
CGContextSetBlendMode(UIGraphicsGetCurrentContext( ),kCGBlendModeClear);
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext( ), 25.0);

CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [[UIColor clearColor] CGColor]);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), point.x, point.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), point.x, point.y);
CGContextStrokePath(UIGraphicsGetCurrentContext()) ;

imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2016-05-14T10:01:00.713 に答える