iPhoneカメラからピクセルデータを取得するこのチュートリアルを読んでいます。
このコードの実行と使用に問題はありませんが、外部ライブラリで使用できるように、カメラ データ (BGRA に含まれる) の出力を取得して ARGB に変換する必要があります。どうすればいいですか?
iPhoneカメラからピクセルデータを取得するこのチュートリアルを読んでいます。
このコードの実行と使用に問題はありませんが、外部ライブラリで使用できるように、カメラ データ (BGRA に含まれる) の出力を取得して ARGB に変換する必要があります。どうすればいいですか?
iOS 5.0 を使用している場合は、Accelerate フレームワーク内で vImage を使用して、次のようなコードを使用して NEON に最適化されたカラー コンポーネント スワップを実行できます (Apple のWebCore ソース コードから抜粋)。
vImage_Buffer src;
src.height = height;
src.width = width;
src.rowBytes = srcBytesPerRow;
src.data = srcRows;
vImage_Buffer dest;
dest.height = height;
dest.width = width;
dest.rowBytes = destBytesPerRow;
dest.data = destRows;
// Swap pixel channels from BGRA to RGBA.
const uint8_t map[4] = { 2, 1, 0, 3 };
vImagePermuteChannels_ARGB8888(&src, &dest, map, kvImageNoFlags);
、、およびはwidth
、 、、およびを介してピクセル バッファから取得されます。は、ピクセル バッファー内のバイトのベース アドレスへのポインターであり、出力 RGBA イメージを保持するために割り当てたメモリです。height
srcBytesPerRow
CVPixelBufferGetWidth()
CVPixelBufferGetHeight()
CVPixelBufferGetBytesPerRow()
srcRows
destRows
これは、単純にバイトを反復して色コンポーネントを交換するよりもはるかに高速です。
画像サイズによっては、フレームを OpenGL ES にアップロードし、これをテクスチャとして単純な長方形をレンダリングし、glReadPixels() を使用して RGBA 値をプルダウンすることで、さらに高速なソリューションが得られます。アップロードとダウンロードの両方に iOS 5.0 のテクスチャ キャッシュを使用するとさらに良いでしょう。このプロセスは、iPhone 4 の 720p フレームで 1 ~ 3 ミリ秒しかかかりません。もちろん、OpenGL ES を使用すると、プルするサポート コードがさらに多くなります。これオフ。