2011-07-06 17 views
1

在我的應用程序一個UIImage的大小是(320460)關於產品旋轉的UIImage

我創建使用

- (id)initWithCGImage:(CGImageRef)imageRef scale:(CGFloat)scale orientation:(UIImageOrientation)orientation 

我分配取向UIImageOrientationLeft另一個UIImage對象。

然後我打印新的UIImage對象的大小,結果是(460,320)。

它已經旋轉到左側了。

我需要將UIImage存儲在我的文檔目錄中。

NSData *imageData = UIImagePNGRepresentation(rotateImageView); 
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

[imageData writeToFile:[path stringByAppendingPathComponent:@"test.png"] atomically:NO];  

但是,當我從「test.png」

得到了UIImage對象它的大小變更爲(320460),它旋轉到其一部開拓創新的地位。

我想它可以存儲在(460320)

我做出的一些錯誤?

謝謝!

回答

1

我也遇到過這個問題。當您在Apple代碼中傳遞圖像方向時,實際上不會旋轉任何像素數據。相反,基本上存在與圖像一起存儲的枚舉值。許多蘋果的圖像渲染器都足夠聰明,可以讀取此枚舉值,並使用它來正確顯示圖像。所以你分享的代碼片段只是改變這個枚舉值。尊重此值的渲染器將顯示您想要的內容,而許多其他渲染器將忽略它。

有幾個解決方案可用。首先,如果您通過iOS顯示圖像,則可以使用UIImageView的transform屬性以及CGAffineTransformMakeRotation來獲取所需的方向。

其次,你實際上可以旋轉原始像素數據,這可以這樣實現:

How to rotate image file?

我建議第一個解決方案,因爲它更容易代碼,更高效。但是,如果您將在iOS之外共享這些圖像,則第二種方法將提供更可靠的結果。