OrangeMaker_logo
memo アイコン SDK-MFC 備忘録

Windows SDKやMFCに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)

DIB形式のPixelビットのサイズ計算方法

2010/7/9 作成

 WindowsのDIB形式のbitmapはメモリデバイスとして便利につかえます。

 特にmfcではCImageクラスでラップするとあまり面倒ことを考えずに処理できます。

しかしながら、用意されたAPIだけでは処理できずにPixcelビットを直接操作したいことがあります。このときいくつかの注意点があります。

 その1)ラスターの並び方向

 DIB形式ではOS2の名残でラスターが下から上に並びます。これはヘッダ部(BIMAPINFO/BITMAPFILEHEADER)のbiHeightの符号で決まります。ラスターが上から下(トップダウン)の場合はbiHeightデータがマイナスとなります。

 その2)Pixelビットサイズ

 Pixcelビットを格納するメモリのサイズは常にラスター単位で4の整数倍になります。これもカラービット単位で考えると結構面倒な気がしますが、次の式を計算すれば全体のサイズ(BYTE単位)を求めることができます。

UINT size = ((((biWidth * biBitCount) + 31) & ~31) >> 3) * biHeight;

 ラスター単位で4で割って余りがあれば切り上げて。。なんて計算が一発で出来ます。知っていると便利です。

 ただし、先のラスター方向があるのでbiHeightは絶対値で計算するの忘れないように。。