SDK から、ピクセル形式の BGR がパックされた画像を取得しますBGRBGRBGR
。別のアプリケーションでは、この形式を RGB 平面 に変換する必要がありますRRRGGGBBB
。
私は C# .NET 4.5 32 ビットを使用しており、データは同じサイズのバイト配列になっています。
現在、配列ソースを反復処理して、BGR
値をターゲット配列の適切な場所に割り当てていますが、時間がかかりすぎます (1.3 メガピクセルの画像で 180 ミリ秒)。コードが実行されるプロセッサは、MMX、SSE、SSE2、SSE3、SSSE3 にアクセスできます。
変換を高速化する方法はありますか?
編集:これが私が使用している変換です:
// the array with the BGRBGRBGR pixel data
byte[] source;
// the array with the RRRGGGBBB pixel data
byte[] result;
// the amount of pixels in one channel, width*height
int imageSize;
for (int i = 0; i < source.Length; i += 3)
{
result[i/3] = source[i + 2]; // R
result[i/3 + imageSize] = source[i + 1]; // G
result[i/3 + imageSize * 2] = source[i]; // B
}
編集:ソース配列へのアクセスを、チャネルごとに 1 つずつ、3 つのループに分割しようとしましたが、実際には役に立ちませんでした。だから私は提案にオープンです。
for (int i = 0; i < source.Length; i += 3)
{
result[i/3] = source[i + 2]; // R
}
for (int i = 0; i < source.Length; i += 3)
{
result[i/3 + imageSize] = source[i + 1]; // G
}
for (int i = 0; i < source.Length; i += 3)
{
result[i/3 + imageSize * 2] = source[i]; // B
}
質問がまだ回答されていないため、バンプします。どんなアドバイスでも大歓迎です!