프로그래밍/iOS

image 회전시키기

AlwaysNR 2012. 8. 29. 16:05

UIImage의 imageOrientation을 조정하는건 이미지 데이터 자체가 회전되는게 아니라

말 그대로 image의 orientation속성만 조정한다.

디스플레이 할때 orientation 속성에 맞게 회전시켜 보여줄 뿐이고, 실제 이미지 데이터는 변함 없다.

그래서, 이미지 orientation속성을 지원 안하는 뷰어로 이미지를 볼땐 이미지가 의도하지 않은 방향으로 회전되어 표시되기도 한다.

orientation속성의 조정이 아닌, 실제 이미지 데이터를 회전시키고 싶을때 아래 함수 사용.


- (CGImageRef)CGImageRotatedByAngle:(CGImageRef)imgRef angle:(CGFloat)angle

{

CGFloat angleInRadians = angle * (M_PI / 180);

CGFloat width = CGImageGetWidth(imgRef);

CGFloat height = CGImageGetHeight(imgRef);

CGRect imgRect = CGRectMake(0, 0, width, height);

CGAffineTransform transform = CGAffineTransformMakeRotation(angleInRadians);

CGRect rotatedRect = CGRectApplyAffineTransform(imgRect, transform);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef bmContext = CGBitmapContextCreate(NULL,

  rotatedRect.size.width,

  rotatedRect.size.height,

  8,

  0,

  colorSpace,

  kCGImageAlphaPremultipliedFirst);

CGContextSetAllowsAntialiasing(bmContext, YES);

CGContextSetInterpolationQuality(bmContext, kCGInterpolationHigh);

CGColorSpaceRelease(colorSpace);

CGContextTranslateCTM(bmContext,

  +(rotatedRect.size.width/2),

  +(rotatedRect.size.height/2));

CGContextRotateCTM(bmContext, angleInRadians);

CGContextDrawImage(bmContext, CGRectMake(-width/2, -height/2, width, height),

  imgRef);

CGImageRef rotatedImage = CGBitmapContextCreateImage(bmContext);

CFRelease(bmContext);

[(id)rotatedImage autorelease];

return rotatedImage;



출처: https://gist.github.com/585377