2015-05-03 48 views
1

我的應用使用相機,它處理每一幀,尋找圖像內部的一些元素(如臉部)。將視頻幀的長寬比轉換爲屏幕尺寸

當我在圖像上找到某些東西時,我想在自定義視圖的drawRect:(CGRect)rect屏幕上繪製顯示視頻。

我不是隻繪製矩形,我沒有使用GPU和GLKView。 當我用1920 * 1080運行視頻幀時,我可以通過將屏幕寬度和高度除以視頻幀大小來繪製確切位置。

但是,當我更改爲480 * 360視頻分辨率時,元素未繪製在正確的位置,我相信由於縱橫比差異。 任何想法我需要在這裏做什麼轉換,也許AffineTransfrom?

回答

2

是的。這是由於寬高比。在我的一個項目中,我遇到了類似的問題,我做了以下工作。

  1. 查找縮放因子

    浮子xScale等= destionation.size.width/imageSize.width; //目的地是最大圖像繪製區域。

    float yScale = destionation.size.height/imageSize.height;

    float scaleFactor = xScale < yScale? xScale:yScale;

  2. 查找繪製矩形由

    浮子destinationHeight = destionation.size.height *比例因子;

    float destinationWidth = destionation.size.width * scaleFactor;

    這會給你一個矩形,它可以保持圖像的高寬比。並使用此矩形繪製圖像。您也可以通過將中心點與比例因子相乘來將此矩形對齊到視圖的中心。

  3. 現在通過乘以比例因子將您的臉部矩形從圖像大小轉換爲繪製矩形。

  4. 使用轉換後的點在目標矩形上繪製矩形。