0

不規則な形状の内部にあるピクセルのみを取得したい..openGL ではなくコア グラフィックスを使用します。不規則な形状を描いた画像を次に示します。

代替テキスト

ここに描画コードがあります

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if(drawLineClicked)
    {
        UITouch *touch = [touches anyObject];
        if ([touch view] == EditImageView)
        {
        lastPoint = [touch locationInView:self.view];
        [self drawLines:10.0 andColorWithRed:1.0 Green:0.0 Blue:0.0 Alpha:1.0];
        [self.view setNeedsDisplay];
        currentPoint = lastPoint;
        }
    }
}


-(void)drawLines:(CGFloat)withWidth andColorWithRed:(CGFloat)red Green:(CGFloat)green Blue:(CGFloat)blue Alpha:(CGFloat)alpha
{
UIGraphicsBeginImageContext(Image.size);
    [EditImageView.image drawInRect:CGRectMake(0, 0, Image.size.width, Image.size.height)];
 ctx = UIGraphicsGetCurrentContext();
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetAllowsAntialiasing(ctx,TRUE);
CGContextFlush(ctx);
//sets the line width for a graphic context
CGContextSetLineWidth(ctx,withWidth);
//set the line colour
CGContextSetRGBStrokeColor(ctx, red, green, blue, alpha);  
CGContextMoveToPoint(ctx, currentPoint.x, currentPoint.y);     
CGContextAddLineToPoint(ctx, lastPoint.x,lastPoint.y);      
CGContextStrokePath(ctx);
EditImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
4

2 に答える 2

3

ここにアイデアを投げかけます:

画像に赤い線を直接描く代わりに、画像を複製し、元の画像の上に新しいレイヤーとして追加し、完全に透明なマスクを付けます (したがって、新しいレイヤーは「見えません」)。

次に、ユーザーが赤い線を描いたら、それを使用して、目に見えないレイヤーにマスクとしてパスを作成します。パスが完成したら、パスを (マスク上で) 黒で塗りつぶして、その部分を完全に不透明にします。次に、一番上のレイヤー (マスクされている) のサイズを変更して、描画されたパスの境界四角形にすることができます。

最上位レイヤーの不透明なピクセルは、描画されたパスによって囲まれたピクセルになり、それを使って好きなことを行うことができます (新しい UIImage に描画するなど)。

それが理にかなっていることを願っています...

于 2009-09-29T16:05:57.607 に答える
0

ここで私の古いサンプル コード プロジェクトを見てみましょう:トリミングされた画像

Cocoa TouchではなくCocoa用ですが、考え方は同じです。SourceIn 合成モードを使用して合成することにより、画像をトリミングできます。

于 2009-09-29T19:45:48.003 に答える