Objective-Cで画像を回転させる

Objective-Cで画像を左に90°回転させる5ステップ

f:id:t-kashima:20121207005535j:plain

1. 画像を描画するためのコンテキストを作成して取得します。

// image が元画像(UIImage)
// 元画像の縦が横向きになるので横と縦を反転して指定する
UIGraphicsBeginImageContext(CGSizeMake(image.size.height, image.size.width));
CGContextRef context = UIGraphicsGetCurrentContext();
  • 描画の開始位置は左下から描画方向 X, Y が標準になります。

f:id:t-kashima:20121207010347j:plain

2. 描画開始位置を右上に変更します。

//  image.size.height, 
//  image.size.width の場所に描画開始位置を変更します。
CGContextTranslateCTM(context, image.size.height, image.size.width);

f:id:t-kashima:20121207011108j:plain

3. 描画方向のY軸を反転します。

// X軸はそのまま(1.0)、Y軸は反転(-1.0)
CGContextScaleCTM(context, 1.0, -1.0);

f:id:t-kashima:20121207011816j:plain

4. 描画方向を90°回転します。

// M_PI は定義されていて180°を表します。
CGContextRotateCTM(context, M_PI / 2);

f:id:t-kashima:20121207012046j:plain

5. 画像をコンテキストに描画します。

// 元画像のコアグラフィックを取得します。
CGImageRef image_ref = [image CGImage];
// 領域は元画像全体になります。
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
// 元画像の全体をコンテキストに描画します。
CGContextDrawImage(context, rect, image_ref);

f:id:t-kashima:20121207012647j:plain

ここまでで左に90°回転させることができます。
これを応用すれば180°回転させたり、反転させることもできます。