意外とこういうことをやりたい場合があるんじゃないだろうか。
しかもRetinaの場合ちょっと癖がある。
例えば、[UIImage imageWithCGImage:sourceImage.CGImage scale:[UIScreen mainScreen].scale orientation:sourceImage.imageOrientation];
のように画像を用意して、UIImageViewにセット、UIScrollViewにaddSubViewし、これをクリップする場合を考える。
実際のピクセル座標系のクリップする矩形はこう計算できる。
CGRect cropRect =
{
scrollView.contentOffset.x * scale * [UIScreen mainScreen].scale,
scrollView.contentOffset.y * scale * [UIScreen mainScreen].scale,
scrollView.bounds.size.width * scale * [UIScreen mainScreen].scale,
scrollView.bounds.size.height * scale * [UIScreen mainScreen].scale
};
で、そのあと
CGImageRef imageRef = CGImageCreateWithImageInRect([_sourceImage CGImage], cropRect);
self.editedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
とCGImageの関数でクリップするのが手っ取り早い
ここで注意したいのはUIImageがimageOrientationにUIImageOrientationLeft等で回転している場合だ。この場合、CGImageの関数を適用するときにはその向きを考慮しないことになるので、注意が必要だ。
しかしながら、あらかじめ回転がないことが保証できるならば、素直にやるだけで問題ないだろう。