位图每行的象素

inline DWORD CDib::BytesPerLine()
{
DWORD bytes_per_line ;
bytes_per_line = ( DibInfo->bmiHeader.biWidth * GetBitsPerPixel() + 7 ) / 8 ;
bytes_per_line = ( bytes_per_line + 3 ) / 4 ;
return bytes_per_line * 4 ;
}


bytes_per_line = ( DibInfo->bmiHeader.biWidth * GetBitsPerPixel() + 7 ) / 8 ; 
这一语句:DibInfo->bmiHeader.biWidth * GetBitsPerPixel() 是每行的位数(bits,非bytes),位数/8就是字节数。%8有余数的话那么实际字节数还应+1,所以+7再/8就能保证正好是所需的字节数。
bytes_per_line = ( bytes_per_line + 3 ) / 4 ;
这一语句,+3和上一句同理,4/是因为32位系统实际在分配内存时是以4bytes为单位分配的,所以这句是计算应该分配几个4字节内存单位。
最后的return语句*4就是实际的字节数。
 
posted @ 2014-11-09 10:17  龙泽一狼  阅读(86)  评论(0编辑  收藏  举报