2

AVCaptureDeviceサンプルバッファーデリゲートからQRファインダーマークを見つけるアプリがあります。今、QRマークをカバーするために画面にボックスを配置しようとしています。ただし、1280x720ピクセルの解像度とcameraViewサイズの間の変換に問題があります。

これらのパラメーター(およびビューの座標系が逆さまになっているという事実)に基づいて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から変更されることはありません(これは縦向きに列挙されていると思います)。これから、座標が変更されないため、解決策を見つけるのが簡単になるはずです。異なる方向。

何かアイデア、コーダーコミュニティ?

4

1 に答える 1

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);
于 2013-03-30T06:17:44.760 に答える