UIImageView内の画像を切り抜いて、新しいUIImageを作成したいと思います。たとえば、上の写真では、緑色で囲まれた領域の新しいUIImageが必要です。これを行うコードを見つけました。通常は次のようになります(UIImageカテゴリとして):
- (UIImage *)croppedImage:(CGRect)bounds {
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
完全に理にかなっています。ただし、私のUIImageViewはcontentModeの「アスペクトフィット」です。そのように、CGImageCreateWithImageInRectのCGRect計算が複雑になり、正しい解決策を見つけることができませんでした。
画像に行ったのと同じ変換を緑の長方形に適用する必要があると思いますか?
また、この別の質問(UIImageViewで画像にアスペクトフィットを適用した後の画像サイズを知る方法)を見つけました。これは、サイズを取得するブルートフォースの方法を示しているようですが、それがどのように収まるかはまだわかりませんトリミングの状況。
何か案は?
編集:私の場合、UIImageView上のオーバーレイビューに描かれた上記のような正方形が文字通りあります。したがって、UIImage(UIImageView内)をトリミングしていることに気付いたときに、緑色のCGRectを変更して、「アスペクトフィット」が適用されたときに実行される変換と「一致」するようにする必要があります。たとえば、UIImageViewを「左上」モードのままにすると、基になるUIImageとUIImageViewの間に1:1のマッピングがあるため、すべてが正常に機能します。「左上」モードの問題は、UIImageViewよりも大きい可能性があるため、画像全体が常に表示されるとは限らないことです。