2013-03-10 165 views
4

我正在爲iPad開發iOS 6應用程序。我開發了一些代碼,它可以旋轉UIImage。它對於方形圖像效果很好,但當圖像不是正方形時,它們會被裁剪掉,所以只能看到圖像的一部分(方形)。旋轉UIImage問題

我的代碼:

UIGraphicsBeginImageContext(image.size); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextTranslateCTM(context, 0.5f * image.size.width, 0.5f * image.size.height) ; 
CGContextRotateCTM(context, -1.5707963267949) ; 

[image drawInRect:(CGRect){ { -imatgetemporal.size.width * 0.5f, -image.size.height * 0.5f }, image.size }]; 

UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); 

我認爲這個問題是在0.5F,但我不知道如何解決它。 我能做什麼?

+0

問題很可能在0.5。這當然與你的rect的大小和位置有關。當然,當矩形旋轉90度以外的其他角度時,所產生的邊界框(包圍矩形)比原始矩形大。它的左上角也會移動。您可以嘗試使用drawAtPoint。因此,您不需要計算圍繞旋轉矩形的邊界框的確切框架。但是您仍然需要考慮座標系內左上點的移動。 – 2013-03-10 15:09:14

+0

那我該怎麼做? – 2013-03-10 15:40:45

+0

我的意思是代碼。 [image drawAtPoint .... – 2013-03-10 18:07:04

回答

1

您需要使圖形上下文足夠大,以便旋轉圖像。您正在使用image.size,但應該使用旋轉後的大小作爲UIGraphicsBeginImageContext的參數。此外,您的drawInRect參數不正確。您需要用以下方式偏移(旋轉的)原點x,它決定了最終圖像的y原點:「向上」原始高度的一半(這使得最終圖像完全離開繪圖上下文的頂部),然後以完整的原始寬度「下」,這是最終的圖像高度。

const CGSize imageSize = image.size; 
UIGraphicsBeginImageContext(CGSizeMake(imageSize.height, imageSize.width)); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(context, 0.5f * imageSize.width, 0.5f * imageSize.height) ; 
CGContextRotateCTM(context, -1.5707963267949) ; 
[image drawInRect:(CGRect){ { imageSize.height * 0.5 - imageSize.width, -imageSize.width * 0.5f }, imageSize }]; 

UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); 
+0

我不工作......現在我只能看到圖像的垂直部分,就像總長的1/8。 – 2013-03-15 15:14:15

+0

@MartiSerraVivancos對不起,昨天晚上我寫了匆忙。我編輯了我的答案和定位代碼。我已經在幾種不同的圖像尺寸上測試了新版本,我相信它會適用於您。 – 2013-03-15 17:27:10

+0

我工作完美!謝謝 :) – 2013-03-15 21:39:10