2013-03-26 48 views
2

我有一個應用程序,可以從AVCaptureDevice樣本緩衝區委託中查找QR查找器標記。現在我試圖在屏幕上放置盒子來覆蓋QR標記。但是,我無法在1280x720像素分辨率和cameraView大小之間轉換。從1280x720轉換到UIView尺寸

我想寫一個基於這些參數(和視圖座標系顛倒的事實)來轉換CGRect的方法,但它不起作用。這可能與相機設備的方向有關。這裏是我的代碼轉換方法:

-(CGRect) convertRect:(CGRect) oldRect From90DegreeRotatedCameraSize1280x720ToUIViewSize:(CGSize) viewSize 
{ 
//remember that we are using a gravity of resize aspect fill 

double xScale = viewSize.width/720; 
double yScale = viewSize.height/1280; 

if (xScale < yScale) 
    return CGRectMake(oldRect.origin.x * xScale, viewSize.height - oldRect.origin.y * xScale, oldRect.size.height * xScale, oldRect.size.width * xScale); 
else 
    return CGRectMake(oldRect.origin.x * yScale, viewSize.height - oldRect.origin.y * yScale, oldRect.size.height * yScale, oldRect.size.width * yScale); 
} 

任何人都有一個優雅的解決這個相對簡單的空間座標問題?

編輯 -

我做了連接視頻取向的NSLog的和事實證明,它永遠不會從1變爲(我認爲這是enum'ed爲縱向。)由此看來,它應該更容易找到一個解決方案,因爲座標不會在不同的方向變化。

任何想法,編碼社區?

回答

0

想通了:

當iOS版填補了視圖,它集中它,以便雙方被切斷。爲了在視圖座標之間轉換,需要縮放然後沿被切斷的方向平移:

  return CGRectMake(oldRect.origin.x * xScale, oldRect.origin.y * xScale - (1280 * xScale - viewSize.height)/2, oldRect.size.height * xScale, oldRect.size.width * yScale);