我正在尝试使用 SSE2 和基本公式来优化从 565 到 888 的像素深度转换:
col8 = col5 << 3 | col5 >> 2
col8 = col6 << 2 | col6 >> 4
Run Code Online (Sandbox Code Playgroud)
我取了两个 2x565 128 位向量,我输出了 3x888 128 位向量。
经过一些掩码、移位和 OR'ing 之后,我有两个向量 ((blue << 8) | red)* 8 位颜色存储在 16 位字中,而类似的向量具有零绿色值. 现在我需要将它们组合成 888 输出。
BR: BR7-BR6-...-BR1-BR0
0G: 0G7-0G7-...-0G1-0G0
|
v
OUT1: R5-BGR4-...-BGR1-BGR0
Run Code Online (Sandbox Code Playgroud)
在 SSSE3 中有一个 _mm_shuffle_epi8() 可以解决我的需求,但由于我需要支持的硬件范围,我想将自己限制在 SSE2 上。