|
|
郁闷,研究了两天,还是未能完全正确的解析RGB数据.估计是16位图的555格式和565格式转换问题,颜色有点偏绿色,不过图像数据可以解压了.可以看到图像了.现在发出来是希望有能之士能帮忙修正颜色问题,指出问题所在,实在感激不尽.我会一直等的...我等着你回来,,我等着你回来,咳,咳,言归正传, 参数pbDestDataBuff 指问一个足够大的内存区指针 sizeof( 图像宽 * 图像高 * 2), pbWilData指向wil图像起始数据. wWidth是图像宽, wHeight是图像高.关于传奇3的文件头网上早有资料了.
希望有能之士能帮忙修正颜色问题,指出问题所在,实在感激不尽!!!!
BOOL CWilImageOpear::CompWilDataToBuff( BYTE * pbDestDataBuff, BYTE * pbWilData, DWORD dwWidth, DWORD dwHeight, DWORD length)
{
WORD wRColor;
WORD wGColor;
WORD wBColor;
WORD * pwDest = ( WORD * ) pbDestDataBuff;
WORD * pwSrc = ( WORD * ) pbWilData;
DWORD dwCopyWordCnt = 0;
for( DWORD i = 0; i < dwHeight; i++ )
{
for( DWORD j = 0; j < dwWidth ; j++ )
{
if( *pwSrc == 0xC0 )// 标记,压缩数据
{
pwSrc++;
dwCopyWordCnt = *pwSrc;
j += dwCopyWordCnt;
pwDest += dwCopyWordCnt;
pwSrc++;
}
else if( *pwSrc == 0xC1 ) //标记,不压缩的数据
{
pwSrc++;
dwCopyWordCnt = *pwSrc;
j += dwCopyWordCnt;
for( DWORD k = 0; k < dwCopyWordCnt ; k++) //复制不压缩的WORD
{
pwSrc++;
pwDest++;
// 0x7C00 0x03E0 0x001F // 0xF800、0x07E0、0x001F
wRColor = ( *pwSrc & 0xF800 ) >> 1; //RGB值有点问题
wGColor = ( *pwSrc & 0x07C0 ) >> 1;
wBColor = ( *pwSrc & 0x003E ) >> 2;
*pwDest = wRColor | wGColor | wBColor;
}
pwSrc++;
}
}
pwSrc++;
}
return TRUE;
}
|
|