該函數將CGImage旋轉任意度數,但它將圖像剪切一點。我如何避免剪輯?如何修改此代碼,它旋轉CGImage,而不是旋轉時裁剪圖像?
使矩形稍微變大似乎會扭曲正在旋轉的圖像。
+ (CGImageRef)CGImageRotatedByAngle:(CGImageRef)imgRef angle:(CGFloat)angle {
float angleInRadians = angle * (M_PI/180);
float width = CGImageGetWidth(imgRef);
float 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);
CGColorSpaceRelease(colorSpace);
CGContextTranslateCTM(bmContext,
+(rotatedRect.size.width/2),
+(rotatedRect.size.height/2));
CGContextRotateCTM(bmContext, angleInRadians);
CGContextTranslateCTM(bmContext,
-(rotatedRect.size.width/2),
-(rotatedRect.size.height/2));
CGContextDrawImage(bmContext, CGRectMake(0, 0,
rotatedRect.size.width,
rotatedRect.size.height),
imgRef);
CGImageRef rotatedImage = CGBitmapContextCreateImage(bmContext);
CFRelease(bmContext);
[(id)rotatedImage autorelease];
return rotatedImage;
}
嗨安德魯替換線
,我試圖使用相同的一段代碼,並沒有想出如何解決它,所以圖像不會被裁剪。你有沒有找到一個好的解決方案呢?謝謝 !! – 2010-09-15 22:31:50
我想也許我用一個透明的邊框填充了有問題的圖像,並以此方式破解了它。回顧一下,我不確定爲什麼我標記了這個答案。 – 2011-09-09 23:05:41
自發布以來已經有一段時間了,但看到新的答案 - 旋轉而不進行裁剪,並在邊界框內保留原始圖像的縱橫比。 – jstevenco 2011-10-19 17:19:06