RGB565におけるRGBtoBGRの高速化

画像処理関係は大量のデータを扱うため重い処理である。
そのため重点的に高速化する必要がある。
多くの場合、こう書くであろう。
void rgb2bgr(WORD& data) {
WORD r,g,b;
r = (data >> 11) & 0x1F;
g = (data >> 5) & 0x3F;
b = (data >> 0) & 0x1F;

data = (r << 11) | (g<<5) | (b<<5);
}

Step:14 [/pixel]
Memory:6 [byte]

高速化するにはどうすればよいのであろうか?
よく見てみるとrとbを入れ替えているだけである。
つまり、異なる2つの領域を3ステップ0ワークメモリで入れ替える有名な方法がつかえる。
X = X xor Y
Y = X xor Y
X = X xor Y

【証明】
X1=X0 xor Y0
Y1=X1 xor Y0 = (X0 xor Y0) xor Y0 = X0
X2=X1 xor Y1 = (X0 xor Y0) xor X0 = Y0

次回につづく