注:我图像数据格式是I420,位数是24,其算法如下:
void CMyDecoder::ConverseUV(PBYTE pBuffer,int nWidth,int nHeight)
{
register int nRows=nHeight/2;
register int nNewWidth=nWidth/2;
register int nNewHeight=nRows;
register BYTE TempBuff[720];
register int nTimes=nRows/2;
register int nPos=0;
for(register int nIndex=0;nIndex<nTimes;nIndex++)
{
nPos=nIndex*nNewWidth;
memcpy(&TempBuff,&pBuffer[nPos],nNewWidth);
memcpy(&pBuffer[nPos],&pBuffer[(nRows-nIndex-1)*nNewWidth],nNewWidth);
memcpy(&pBuffer[(nRows-nIndex-1)*nNewWidth],&TempBuff,nNewWidth);
}
}
U、V分量的转换都是调用这个函数的,现在颜色有问题,请高手指教!
4 个解决方案
#1
应该是以height为单位翻转吧,为什么要yuv分开来处理?
#2
u,v分量调用该函数时候用的是否是相应的指针(pBuffer),还有u,v分量有没有弄反
#3
因为YUV420的存储结构是先存Y分量,然后是U分量,最后才是V分量,pBuffer是不会错的,U和V的长度一样,处理方式也应该是一样的
#4
不错,关键是搞清楚存储结构........................................
#1
应该是以height为单位翻转吧,为什么要yuv分开来处理?
#2
u,v分量调用该函数时候用的是否是相应的指针(pBuffer),还有u,v分量有没有弄反
#3
因为YUV420的存储结构是先存Y分量,然后是U分量,最后才是V分量,pBuffer是不会错的,U和V的长度一样,处理方式也应该是一样的
#4
不错,关键是搞清楚存储结构........................................