void ColorInvert_SSE2(unsigned char * pSource, unsigned char * pDest, int nWidth, int nHeight)
{
int nNumberOfPixels = nWidth*nHeight;
// 8 pixels are processed in one loop
int nNumberOfLoops = nNumberOfPixels*4/16;
__m128i i128 ={0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff};
__m128i* pIn = (__m128i*) pSource; // input pointer
__m128i* pOut = (__m128i*) pDest; // output pointer
__m128i tmp;
int nMod = (nNumberOfPixels*4) % (16);
BOOL bNeedDoMode = FALSE;
if(nMod==0)
{
bNeedDoMode = FALSE;
}
else
{
bNeedDoMode = TRUE;
}
//_mm_sub_epi8();
for ( int i = 0; i < nNumberOfLoops; i++ )
{
tmp = _mm_subs_epu8 (i128 , *pIn); // Unsigned subtraction with
// saturation.
// tmp = n1 - *pIn for each byte
*pOut = tmp;
pIn++; // next 4 pixels
pOut++;
}
if(bNeedDoMode)
{
pSource += nNumberOfPixels*4 -nMod;
pDest += nNumberOfPixels*4 -nMod;
int n = nMod/4;
for(int i=0;i<n;i++)
{
pDest[i] =255-pSource[i];
pDest[i+1] = 255-pSource[i+1];
pDest[i+2] = 255-pSource[i+2];
pSource +=4;
pDest +=4;
}
}
}
RGB32 彩色图像负片sse加速算法的实现
最新推荐文章于 2024-07-13 21:27:21 发布