2014-02-20 10 views
0

我正在使用AV Foundation拍照應用程序。用戶拍攝照片後,我把我的主層的子層的內容屬性設置爲所拍攝的照片又名爲imageData:使用AV基金會拍攝圖像的方向是錯誤的

subLayer.contents = (id)[UIImage imageWithData:imageData].CGImage; 

這一切都完美的作品和照片不會在屏幕上顯示。

唯一的問題是照片顯示旋轉90度。

任何想法如何正確顯示照片而不是旋轉?

這裏是照片時,用戶被捕獲它的外觀:

enter image description here

但後來這裏是它的外觀,當我將其顯示爲子層:

enter image description here

回答

1

給定像這樣設置時顯示旋轉的圖像:

subLayer.contents = (id)[UIImage imageWithData:imageData].CGImage;

...你會發現,這個工作好:

UIImageView *view = [UIImageView initWithImage:[UIImage imageWithData:imageData]; 
// then add view and display 

的UIImage,或使用的UIImage類,理解可能影響圖像的顯示,像旋轉的元數據。

由於您直接訪問底層Quartz圖像數據,因此您將跳過UIImage顯示旋轉數據的部分。所以,要麼嘗試以另一種方式做到這一點(例如,使用UIImage設置背景圖像)或自己旋轉CGImage(使用各種CG函數)。

+0

您能否提供一些示例代碼:「自己旋轉CGImage(使用各種CG函數)」?我一直在嘗試過去的20分鐘,卻無法讓它改變它的方向。 – user3117509

+0

說到Core Graphics,大概有一百萬種方法可以讓貓變皮。基本上你應該從原始UIImage獲取方向,使用CGAffineTransformMakeRotation進行變換以正確旋轉它,創建位圖上下文,應用變換並保存上下文。旋轉與縮放並行,因此如果需要縮放,也可以使用變換。您也可以從原始圖像中獲取CIImage,應用一些CIFilter進行旋轉和縮放,並從中獲取新的CGImage。這很簡單,但不重要 - 請檢查文檔! – greymouser

+0

感謝您的詳細回覆。我最終在這裏使用這個解決方案:http://stackoverflow.com/a/10548409/3117509 ...現在唯一的問題是圖像被拉伸和扭曲。我正在使用AVCaptureVideoPreviewLayer,並將其設置爲僅佔用一半的屏幕。相機是否可能拍攝整個屏幕而不是一半? – user3117509

2
UIImage *img = [UIImage imageWithData:imageData]; 
    UIImage *image_Corrected; 
    if (img.imageOrientation !=UIImageOrientationUp) 
    { 

     image_Corrected=[UIImage imageWithCGImage:img.CGImage scale:0.0 orientation:UIImageOrientationUp]; 
    } 
    else 
    { 
     image_Corrected=img; 

    } 
0

相機總是以相同的方向拍攝照片,根據當前的方向旋轉它或者更改其EXIF元數據字典是一種軟件責任。
如果使用靜態圖像捕捉或輸出數據緩衝區,可以如何處理它們之間有一些細微的差異。
我在我的博客上寫了一篇關於它的文章:EXIF pain
我建議你也檢查that sample code from Apple site,可能是AVCam最完整的一個。