DIB位图问题
1.DWORD m_dwDdbWidthBytes=((m_nWidth*24+15)/16)*2;
m_nWidth为1.4.8位DIB位图宽度
公式如何来的?
我看到以前有人回答是:
*24/16*2 相对于*3,24位正好是3字节,
整体是为了保证结果为偶数,
这个公式看起来挺笨,
简化一下结果应该一样:
DWORD m_dwDdbWidthBytes==(m_nWidth*3+1)&-2;
看了之后觉得好像不对,希望会的人解释一下
2.
//每行实际字节数, 8个像素对应一个字节.
LONG nLineBytes = (m_nWidth + 7) / 8;
BYTE abyBitMask[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
for(int n = 0; n < 8;n++)
{
//8个像素数据的索引值
BYTE byBit8 = *(pbyDibRaw++);//pbyDibRaw为指向DIB行数据的指针
BYTE byBitSingle = (byBit8 & abyBitMask[n]) >> (7 - n);
}
请解释一下 BYTE byBitSingle = (byBit8 & abyBitMask[n]) >> (7 - n);