Help us understand the problem. What is going on with this article?

UIScrollViewで画像のクリッピング

More than 5 years have passed since last update.

意外とこういうことをやりたい場合があるんじゃないだろうか。

しかも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の関数を適用するときにはその向きを考慮しないことになるので、注意が必要だ。
しかしながら、あらかじめ回転がないことが保証できるならば、素直にやるだけで問題ないだろう。

Ushio
ソフトウェアとチノちゃんが好き。あと光輸送を計算するのも好き
https://github.com/Ushio
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away