Created
December 18, 2014 08:55
-
-
Save hirokim/ef5d1f2577b7272a0f0a to your computer and use it in GitHub Desktop.
UIImageの向きを統一するために作り直す処理
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 度数をラジアンに変換するマクロ | |
| static inline double radians (double degrees) {return degrees * M_PI/180;} | |
| /** | |
| * UIImageの向きを統一するために作り直す | |
| * | |
| */ | |
| + (UIImage*)remakeImageForOrientation:(UIImage*)originalImage { | |
| // 変換が不要なものはそのままリターン | |
| if (originalImage.imageOrientation == UIImageOrientationUp) { | |
| return originalImage; | |
| } | |
| // CGImageRefをoriginalImageから新たに作成する | |
| CGRect rect = CGRectMake(0, 0, originalImage.size.width, originalImage.size.height); | |
| CGImageRef imageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect); | |
| // ビットマップ情報、色情報を取得 | |
| CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); | |
| CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef); | |
| // 元画像をセットしてあるコンテキストを生成 | |
| CGContextRef bitmap = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo); | |
| // 元画像の持っている向きで画像を回転させて描画領域内に移動してコンテキストに描画 | |
| if (originalImage.imageOrientation == UIImageOrientationLeft) { | |
| CGContextRotateCTM (bitmap, radians(90)); | |
| CGContextTranslateCTM (bitmap, 0, -rect.size.height); | |
| CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.height, rect.size.width), imageRef); | |
| } else if (originalImage.imageOrientation == UIImageOrientationRight) { | |
| CGContextRotateCTM (bitmap, radians(-90)); | |
| CGContextTranslateCTM (bitmap, -rect.size.height, 0); | |
| CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.height, rect.size.width), imageRef); | |
| } else if (originalImage.imageOrientation == UIImageOrientationDown) { | |
| CGContextTranslateCTM (bitmap, rect.size.width, rect.size.height); | |
| CGContextRotateCTM (bitmap, radians(-180.)); | |
| CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.width, rect.size.height), imageRef); | |
| } | |
| // コンテキストをUIImageに変換 | |
| CGImageRef ref = CGBitmapContextCreateImage(bitmap); | |
| UIImage *resultImage=[UIImage imageWithCGImage:ref]; | |
| // 後処理 | |
| CGImageRelease(imageRef); | |
| CGContextRelease(bitmap); | |
| CGImageRelease(ref); | |
| return resultImage; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment