有没有什么办法可以像在霓虹灯下的代码那样对32bpp图像通道进行DE交错。
//Read all r,g,b,a pixels into 4 registers
uint8x8x4_t SrcPixels8x8x4= vld4_u8(inPixel32);
ChannelR1_32x4 = vmovl_u16(vget_low_u16(vmovl_u8(SrcPixels8x8x4.val[0]))),
channelR2_32x4 = vmovl_u16(vget_high_u16(vmovl_u8(SrcPixels8x8x4.val[0]))), vGaussElement_32x4_high);
基本上我希望所有颜色通道都在单独的向量中,每个向量有4个32位元素进行一些计算,但我不太熟悉SSE,无法在SSE中找到这样的指令,或者如果有人可以提供更好的方法那?任何帮助都非常感谢
答案 0 :(得分:2)
由于8位值是无符号的,你可以通过移位和屏蔽来实现这一点,就像对标量代码一样,例如。
__m128i vrgba;
__m128i vr = _mm_and_si128(vrgba, _mm_set1_epi32(0xff));
__m128i vg = _mm_and_si128(_mm_srli_epi32(vrgba, 8), _mm_set1_epi32(0xff));
__m128i vb = _mm_and_si128(_mm_srli_epi32(vrgba, 16), _mm_set1_epi32(0xff));
__m128i va = _mm_srli_epi32(vrgba, 24);
请注意,我假设您的RGBA元素在LS 8位中具有R分量而在MS 8位中具有A分量,但是如果它们是相反的字节序,则可以仅更改{{的名称1}} / vr
/ vg
/ vb
向量。