質問

refollow">このチュートリアルiPhoneカメラからピクセルデータを取得する。

このコードを使っていない間は、カメラデータ(BGRAに入ってきた)の出力を行い、それをARGBに変換して外部ライブラリと共に使用する必要があります。どうやってこれを行いますか?

役に立ちましたか?

解決

iOS 5.0では、Accelerate Framework内のvemageを使用して、次のようなコードを使用して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);
.

widthheight、およびsrcBytesPerRowは、CVPixelBufferGetWidth()CVPixelBufferGetHeight()、およびCVPixelBufferGetBytesPerRow()を介してピクセルバッファから得られます。 srcRowsは、ピクセルバッファ内のバイトのベースアドレスへのポインタであり、destRowsは出力RGBAイメージを保持するために割り当てられたメモリになります。

これは、単にバイトを繰り返し、色成分を交換するよりもはるかに高速になるはずです。

画像サイズに応じて、さらに高速な解決策はOpenGL ESにフレームをアップロードし、これをテクスチャとして単純な矩形をレンダリングし、glreadpixels()を使用してRGBA値をプルダウンします。アップロードとダウンロードの両方にiOS 5.0のテクスチャキャッシュを使用することでさえ、このプロセスはiPhone 4の720pフレームで1~3ミリ秒しかかかりません。もちろん、OpenGL ESを使用すると、より多くのサポートコードを引いてください。これは

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top