大きい画像を回転させようとするとUIGraphicsGetImageFromCurrentImageContextで落ちる
画像を回転させる場合、例えばこんな感じでやっていたのだが、大きな画像をこれで動かした時はUIGraphicsGetImageFromCurrentImageContextで落ちる事がわかった
UIImage *img = self.image; CGImageRef imgRef = [img CGImage]; CGContextRef context = nil; UIGraphicsBeginImageContext(CGSizeMake(img.size.height, img.size.width)); context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, img.size.height, img.size.width); CGContextScaleCTM(context, 1.0, -1.0); CGContextRotateCTM(context, M_PI/2.0); CGContextDrawImage(context, CGRectMake(0, 0, img.size.width, img.size.height), imgRef); UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
原因としてはメモリ不足っぽいので、暫定処理として解像度を少し落として回転をさせるようにした。とは言え解像度を落としたくないので出来れば別の手段が欲しいなあ
UIImage *img = self.image; CGImageRef imgRef = [img CGImage]; CGContextRef context = nil; UIGraphicsBeginImageContextWithOptions(CGSizeMake(img.size.height, img.size.width), NO, [[UIScreen mainScreen] scale] * 0.7); context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, img.size.height, img.size.width); CGContextScaleCTM(context, 1.0, -1.0); CGContextRotateCTM(context, M_PI/2.0); CGContextDrawImage(context, CGRectMake(0, 0, img.size.width, img.size.height), imgRef); UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
追記:
これでもiPhoneのカメラで取った画像なんかを回転させると正常に回転出来なかった。2448*3264の写真を回転させると絵はそのままに3264*2448になるので単純に横にのびただけの画像になってしまうので駄目だ
さらに追記:
追記に書いた問題は別問題だった。解決済み