これはさまざまな観点から何度も尋ねられていると思いますが、まだここで答えを見つけることができません.
私が達成したいこと 私がしたい ことは、UIImage を表示し、ユーザーが画像上に四角形を描画できるようにし、最終的に選択範囲をトリミングできるようにすることです。
これまでの調査 で、トリミングを処理する SO に関する以前の質問を見つけましたが、変更されない静的なトリミング領域を扱うことがよくあります。これは、そのようなメカニズムの次の制約につながります。
- 関心のある画像の領域はどこにでも配置される可能性があります。たとえば、道路標識をトリミングしようとしている場合、ある画像では中央に配置されていても、別の画像では左に配置されている可能性があるため、どの領域を予測することはできませんトリミングします。
- 関心のある領域のサイズと縮尺は変更される場合があります。たとえば、ある画像はその道路標識のクローズアップであり、トリミング領域が大きくなりますが、別の画像は遠くから撮影されたものであり、トリミング領域が小さくなります。
上記の 2 つの変数の組み合わせでは、画像内の関心のある領域がどこにあるかを正確に予測することはほとんど不可能です。この場合、道路標識に興味があります。
次のような素敵な意図ですべてのハードワークを委任できるため、これは Android ではすべて桃色です。
Intent intent = new Intent("com.android.camera.action.CROP");
ただし、iOS に相当するものは見つかりません。
このソースからこのコードを見つけました:
- (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image
{
// begin a graphics context of sufficient size
UIGraphicsBeginImageContext(image.size);
// draw original image into the context
[image drawAtPoint:CGPointZero];
// get the context for CoreGraphics
CGContextRef ctx = UIGraphicsGetCurrentContext();
// set stroking color and draw circle
[[UIColor redColor] setStroke];
// make circle rect 5 px from border
CGRect circleRect = CGRectMake(0, 0,
image.size.width,
image.size.height);
circleRect = CGRectInset(circleRect, 5, 5);
// draw circle
CGContextStrokeEllipseInRect(ctx, circleRect);
// make image out of bitmap context
UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();
// free the context
UIGraphicsEndImageContext();
return retImage;
}
クロッピングの良い出発点だと思います(ただし、ミステリーサークルは行います)。呼び出し時にトリミングする領域を事前に定義することに依存していますCGRectMake
。
この前の質問では、実際のトリミングの方法についても詳しく説明しています。
ユーザーが四角形を描画できるようにするには、ジェスチャーと統合する必要があると思いますか?
質問: ユーザーが画像ビューの上に四角形を描画して、その領域をトリミングできるようにするにはどうすればよいですか?