對於我正在開發的應用程序,我讓用戶指定他們想要在相機上捕捉的對象的尺寸(例如30「x 40」)。接下來我想要做的是在相機上顯示一個cameraOverlayView,它只顯示一個撫摸透明的正方形,它具有正確的比例來捕捉該物體。從相機中剪下預定義的一張照片
所以,我想兩件事情得到這個工作:
使用它使用AVCaptureVideoPreviewLayer
顯示與現場視頻饋送視圖一個UIViewController。在該提要之上,我顯示一個透明視圖,該視圖用正確的尺寸繪製一個正方形(使用用戶指定的比例)。
和
在另一種嘗試中,我創建一個UIViewController,含有一個按鈕,彈出UIImagePickerController
。使用這個控制器,我還創建了一個視圖,我使用cameraOverlayView
屬性附加到選取器。
我對這兩種方法的主要問題是,實際拍攝的圖像總是比我在屏幕上看到的圖像大,但我不完全確定如何切割出圖像後的照片已被拍攝。
因此,例如: 我的UIImagePickerController顯示,我把一個覆蓋,顯示一個300 x 400px大的正方形。用戶使用這個方塊拍攝他們的物體的照片,並將它們的物體置於這個方塊內。
的拍攝照片,但不是照片是小320x480(或640×960),我得到的結果是3500x2400(或類似的東西。這是一個完全不同的比率,則屏幕比例(當然)。
我怎麼然後確保我切出的圖像的右側部分。
實際計算應顯示(而且應該被用來確定應該是什麼樣件圖片的平方大小的代碼剪下):
+ (CGRect) getFrameRect:(CGRect) rect forSize:(CGSize) frameSize {
if (CGSizeEqualToSize(frameSize, CGSizeZero))
return CGRectZero;
float maxWidth = rect.size.width - 20;
float maxHeight = rect.size.height - 20;
float ratioX = maxWidth/frameSize.width;
float ratioY = maxHeight/frameSize.height;
float ratio = MIN(ratioX, ratioY);
float newWidth = frameSize.width * ratio;
float newHeight = frameSize.height * ratio;
float x = (rect.size.width - newWidth)/2;
float y = (rect.size.height - newHeight)/2;
return CGRectMake(x, y, newWidth, newHeight);
}
這決定了可以使用frameSize參數中指定的比率創建的最大正方形,其中應在rect參數中提供正方形的尺寸。
一些解決方案浮現在腦海,但我不確定這是否可行。
- 將照片縮小到屏幕寬度或高度(無論先出現哪個),以圖片的中心爲準,這與拍攝照片時顯示的中心相同?不知道這會起作用,我試了一下,但失敗了。