私は現在、その場でライブカメラ画像のスナップショットを撮るためのアドホックな変更を試みて、 ImageSnapの内部を微調整しています。縦横比に関係なく画像のサイズが変更されていることに気付き、問題を次の行にたどりました。
CVImageBufferRef frame;
// obtain frame
verbose("frame is %d x %d px\n", (int)CVPixelBufferGetWidth(frame),
(int)CVPixelBufferGetHeight(frame));
CIImage *ciimg = [CIImage imageWithCVImageBuffer:frame];
verbose("CIImage has %d x %d px\n", (int)[ciimg extent].size.width,
(int)[ciimg extent].size.height);
少なくとも私が使用している特定のデバイスの場合、これらの行の出力は次のとおりです。
frame is 1920 x 1080 px
CIImage has 1888 x 1062 px
そのため、画像のサイズが変更されたようですが、そのようなサイズ変更を要求するコードの部分は見当たりません。それはどこから来たのか、さらに重要なことに、どうすればそれを防ぐことができるのでしょうか?
次のドキュメントを使用していますが、そこにヒントが見つかりません。
編集:私が知る限り、スケーリングはなく、代わりにクロッピングが行われています。これは、Core Video Programming Guide に記載されているクリーンな絞り設定によるものです。したがって、問題は、このクリーンな絞りをフル フレーム サイズに設定する方法、またはそれを考慮に入れない変換を回避する方法です。