2013-01-15 1 views
0

내 iPad를 세로로 잡고있을 때 올바른 방향으로 표시되는 UIImage이 있는데, CGImageRef이 연결되면 CGImageRef이 반 시계 방향으로 90도 회전합니다. 어떤 인터넷 검색 후에는 UIImage과 달리 CGImageRef에 방향 데이터가 없기 때문에 이것이 가능하다는 것을 알았습니다. 나는 확인하고 CGImageRef의 픽셀의 일부를 수정해야하고, 나는 현재 직접 (이미지가있는 UIImage * 임) RAWDATA 변수에 액세스하여이 일을 해요 :CGImageRef를 어떻게 회전합니까?

CGImageRef imageRef = [image CGImage]; 

CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); //maybe make ...Gray(); 
unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char)); 
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpaceRef, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); 

그러나, 순서대로 나를 위해에 제대로 rawData에 저장된 픽셀 데이터를 수정하려면 올바른 방향으로 CGImageRef가 필요합니다. CGImageRef을 시계 방향으로 90도 회전 한 다음 rawData (픽셀 정보)에 액세스하려면 어떻게해야합니까?

답변

0

이 시도 : 타겟 높이와 너비 필요가 좌/우 방향에 대한 이성을 상실 할 이유는 무엇

CGImageRef imageRef = [sourceImage CGImage]; 
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef); 


CGContextRef bitmap; 

if (sourceImage.imageOrientation == UIImageOrientationUp || sourceImage.imageOrientation == UIImageOrientationDown) { 
    bitmap = CGBitmapContextCreate(NULL, targetWidth, targetHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo); 

} else { 
    bitmap = CGBitmapContextCreate(NULL, targetHeight, targetWidth, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo); 

} 

if (sourceImage.imageOrientation == UIImageOrientationLeft) { 
    CGContextRotateCTM (bitmap, radians(90)); 
    CGContextTranslateCTM (bitmap, 0, -targetHeight); 

} else if (sourceImage.imageOrientation == UIImageOrientationRight) { 
    CGContextRotateCTM (bitmap, radians(-90)); 
    CGContextTranslateCTM (bitmap, -targetWidth, 0); 

} else if (sourceImage.imageOrientation == UIImageOrientationUp) { 
    // NOTHING 
} else if (sourceImage.imageOrientation == UIImageOrientationDown) { 
    CGContextTranslateCTM (bitmap, targetWidth, targetHeight); 
    CGContextRotateCTM (bitmap, radians(-180.)); 
} 

CGContextDrawImage(bitmap, CGRectMake(0, 0, targetWidth, targetHeight), imageRef); 
CGImageRef ref = CGBitmapContextCreateImage(bitmap); 
+0

? 또한 왜 비트 맵을 변환해야합니까? – Mahir

+2

bitmapInfo의 출처는 어디입니까? CGContextRef도 릴리스해야합니다. – sdsykes

관련 문제