DIB Library

 WindowsのC++処理系汎用のDIB(デバイスに依存しないビットマップ)を扱うクラスです。補助関数として、TGAやJPEG、PNGなどのファイル入出力や、エンボスやぼかしなどのエフェクト。全体として、処理速度よりもプログラム効率重視です。かなり汚いですが完全なソースコード付きですので、必要であれば参考にしてください。フリーなので自由に改変して使うとかしても構いません。VisualC++6.0とC++Builder4/5で使用できることを確認済みです。

Download DibLib.zip (261KB)


更新履歴

1999/9/23 -> 1999/12/4の更新内容
DIB用メモリの確保に標準として使う関数をmalloc()からGlobalAlloc()へ変更。
PNG入出力にmlibpng.dllを使うように変更。mlibpngのソースコードも公開。
1999/12/4 -> 1999/12/29の更新内容
RLE8形式のBMPファイルの読み込みに対応。
メディアンカット法による8bitカラーへの減色に対応。
4bitカラーへの減色に対応。
1999/12/29 -> 2000/3/11の更新内容
新規関数Clear()。
バグ修正。
2000/3/11 -> 2000/9/5の更新内容
4bitカラーへのメディアンカット減色で画像が斜めに崩れるバグを修正。
4bitカラーのClipCut()で画像が崩れるバグを修正。
Resize(),ChangeSize(),ClipCut(),ClipClone(),Scroll()の1bitへの対応。
Resize(),ChangeSize()の4bitへの対応。
TGA入力でコメント部分を処理できるようにした。
TGA入力でランレングス圧縮形式に対応。
PPM入力でP3(アスキー)形式に対応。
IFF入出力関数を追加。
2000/9/5 -> 2000/10/22の更新内容
エフェクト関数の強化。

使用例

例1
BMPファイルを読み込んで色深度とサイズを調整してから描画する
DibStream *dib = new DibStream;
dib->LoadFromFile("hogehoge.bmp");
dib->ChangeBpp(24);
//もし横か縦が256より大きいサイズなら調整する
if(dib->GetWidth() > 256 || dib->GetHeight() > 256)
  dib->Resize(min(256,dib->GetWidth()),min(256,dib->GetHeight()));
dib->Draw(hdc, 0, 0);
delete dib;


例2
任意の大きさを持ったフルカラービットマップを作成し、それに斜めのグラデーションを格納してBMPファイルに保存する
int width=256, height=256;
DibStream *dib = new DibStream;
dib->Create(width,height,24);
for(int y=0; y<height; y++) {
  BYTE *ptr = (BYTE *)dib->ScanLine(y);
  for(int x=0; x<width; x++,ptr+=3)
    ptr[0] = ptr[1] = ptr[2] = (BYTE)(x+y);
}
dib->SaveToFile("hogehoge.bmp");
delete dib;



戻る