DIBLIB API

  1. CREATEBITMAP概要
  2. CREATEBITMAPリファレンス
  3. CPalette概要
  4. CPaletteリファレンス
  5. CDIBitmap概要
  6. CDIBitmapリファレンス
●CREATEBITMAP概要

  ビットマップの白紙作成時に与える情報を保持する構造体です。
  値は幅・高さ・解像度・使用色数です。

  CDIBitmapのコンストラクタ・Create関数で使います


●CREATEBITMAPリファレンス

cbWidth         幅
cbHeight        高さ
cbBitCount      1ピクセルあたりのビット数です。
                例えばモノクロだと2、フルカラーだと24になります。
cbUsedColor     使用色です。
                フルカラービットマップは0にしてください。
                また、BitCountが持てる最大の色数よりも
                大きくしないでください。


●CPalette概要

  ビットマップに含まれるカラーテーブル(PALETTEENTRY構造体の配列)を
  管理するクラスです。
  CDIBitmap::GetPaletteとCDIBitmap::SetPaletteを
  使って、カラーテーブルの取得・書き換を行えます。

  CPalette::Load,Save関数を使うとRIFFパレットファイル(拡張子pal)
  として保存・読みこみができます。


●CPaletteリファレンス

  ■ CPalette (コンストラクタ)

	CPalette();

      エントリ数が0の空のパレットを構築します。

	CPalette(UINT);

      エントリ数を指定してオブジェクトを構築します。
      エントリの中身は0です。

	CPalette(const CPalette &);

      コピーコンストラクタです。


  ■ ~CPalette (デストラクタ)

	~CPalette();

      オブジェクトを破棄します。
      実際に呼び出すことはありません。


  ■ Create

	void Create(UINT in_NewEntries);

      新しいエントリ数を持つオブジェクトを構築します。
      エントリの値はすべて0です。

	void Create(const CPalette&);

      同じものを構築します。

	void Create(const CPalette&,UINT,UINT);

      指定したパレットのエントリの一部からパレットを構築します。
      第二引数は開始位置
      第三引数はエントリ数です。


  ■ Load

	bool Load(LPCTSTR);

      RIFFパレットファイルから読みこみます。
      引数はフルパスです。
      失敗するとfalse、成功するとtrueが戻ります


  ■ Load

	void Save(LPCTSTR);

      現在のパレットをRIFFパレットに出力します。
      引数はフルパスです。

  ■ GetNumEntries

	UINT GetNumEntries() const;

      現在のパレットのエントリ数を返します。

  ■ operator []

	      PALETTEENTRY &operator[](UINT in_Index);
	const PALETTEENTRY &operator[](UINT in_Index) const;

      指定したインデックスのエントリを
      PALETTEENTRY構造体として取得します。
      配列のようにアクセスできます。
      値を書きかえることもできます。


  ■ GetPointer

	PPALETTEENTRY GetPointer() const;

      パレットをPALETTEENTRYの配列として取得します。
      APIなどに渡すのに使用してください。
      これをつかって書きかえることもできます。


  ■ GetColorAt

	COLORREF GetColorAt(UINT in_Index) const;

      指定したインデックスの色をCOLORRREFとして取得します。


  ■ GetColorAt

	bool     SetColorAt(UINT in_Index,BYTE,BYTE,BYTE);

      指定したインデックスの色を成分で設定します。
      順番は赤、緑、青です。

  ■ AddColors

	void AddColors(PPALETTEENTRY,UINT);

      現在のカラーテーブルの末尾にエントリを追加します。
      一度に複数のエントリを追加できます。

      第一引数はPALETTEENTRYの配列、第二引数は要素数です。


  ■ Swap

    bool Swap(UINT in_Index1,UINT in_Index2);

      二つのエントリを交換します。

  ■ Resize

    void Resize(UINT in_NewSize);

    カラーテーブルのエントリを拡張(縮小)して、
    新しくバッファを確保しなおします。
    拡張・縮小、いずれの場合でも
    今までのカラーテーブルの内容が保持される点がCreateと違います。
    拡張されたエントリの成分は0です。


●CDIBitmap概要

  DIBLIBのメインとなるDIB情報を保持するクラスです。
  すべての機能はこのクラスを介して行われます。


●CDIBitmapリファレンス

  ■ CDIBitmap(コンストラクタ)

	CDIBitmap();

    空のオブジェクトを構築します。

	CDIBitmap(HDC,PCREATEBITMAP);

    無地のビットマップを作成します。

	CDIBitmap(HDC,LPCTSTR);

    ファイルからビットマップを読みこみます。
    フルパスを指定してください。

	CDIBitmap(HDC,UINT,HMODULE);

    リソースからビットマップを読みこみます。
    ビットマップリソースを持つモジュールの
    インスタンスハンドルとリソースIDを指定します。


  ■ ~CDIBitmap(デストラクタ)

	virtual ~CDIBitmap();

    オブジェクトを破棄します。
    単独で呼び出すことはありません。


  ■ Release

	void Release();

    現在保持しているオブジェクトを破棄します。


  ■ GetUsedColor

	DWORD GetUsedColor()  const;

    ビットマップの使用色を取得します。
    フルカラービットマップのときは0です。


  ■ GetBitmapSize

	DWORD GetBitmapSize() const;

    画像ビットの占めるメモリのサイズを取得します。
    画像サイズを取得する同名の関数と区別してください。


  ■ GetLineSize

	DWORD GetLineSize()   const;

    画像ビットが一ラインあたり何バイトで
    並べられているかを取得します。


  ■ IsEmpty

	bool IsEmpty() const;

    ビットマップが空かどうかを判断します。


  ■ operator HBITMAP

	operator HBITMAP() const;

    現在保持しているビットマップのハンドルを取得します。
    空のオブジェクトであればNULLが返ります。


  ■ GetHeader

	bool GetHeader(PBITMAPFILEHEADER,PBITMAPINFOHEADER) const;

    ビットマップ情報を保持している各構造体を取得できます。
    リソースから読みこんだ場合、
    BITMAPFILEHEADER構造体はありません。

    どちらか一方だけを取得したい場合、
    もう片方の引数にはNULLを指定できます.


  ■ GetBitmapSize

	bool GetBitmapSize(PSIZE) const;

    現在のビットマップの幅と高さを取得します。
    同名の関数があるので注意してください


  ■ GetPalette

	bool GetPalette(CPalette &) const;

    現在のビットマップが保持するカラーテーブルを
    CPaletteとして取得します。
    オブジェクトが空だったり、
    フルカラービットマップが読みこまれている場合は、
    この関数は失敗します。


  ■ SetPalette

	bool SetPalette(const CPalette &);

    現在のビットマップのカラーテーブルを書き換えます。
    フルカラービットマップの場合は使えません。

    また、エントリ数が解像度で再現できる最大色数を
    超えている場合も失敗します。
    すなわち、この関数で解像度を変更することはできません。

    カラーテーブル変更後の画像を表示する場合、
    ビットマップハンドルを更新する必要があります。
    RefreshHandle関数を呼び出してください


  ■ Create

    オブジェクトを再構築します。
    この関数を呼び出す前に、Release関数を呼び出す必要はありません。
    自動的に現在のビットマップは破棄されます。

	bool Create(HDC,PCREATEBITMAP);

    新しいビットマップは無地です。

	bool Create(HDC,LPCTSTR);

    新しいビットマップをファイルから読みこみます。

	bool Create(HDC,UINT,HMODULE);

    新しいビットマップをリソースから読みこみます。


  ■ Save

	bool Save(LPCTSTR) const;

    現在のビットマップをファイルとして保存します。
    引数はフルパスです。


  ■ RefreshHandle

	bool RefreshHandle(HDC);

    ビットマップハンドルを更新します。
    カラーテーブルを書き換えた画像を表示する場合、
    この関数を呼び出す必要があります。


  ■ BitBlt

    指定したデバイスコンテキストに現在のビットマップを転送・表示します。

	void BitBlt(HDC in_hDC,int x,int y,DWORD in_Rop) const;

    座標(x,y)に現在のビットマップ全体を転送します。

	void BitBlt(HDC in_hDC,int x,int y,
		int in_SrcX,int in_SrcY,int cx,int cy,DWORD in_Rop) const;

    座標(x,y)に現在のビットマップの(in_SrcX,in_SrcY)を左上とする
    幅cx,高さcyのビットマップを転送します。


  ■ StretchBlt

    指定したデバイスコンテキストに現在のビットマップを
    拡大・縮小して転送・表示します。

	void StretchBlt(HDC in_hDC,int x,int y,
		int cx,int cy,DWORD in_Rop) const;

    座標(x,y)に現在のビットマップ全体を
    幅cx,高さcyにサイズ変更して転送します。

	void StretchBlt(HDC in_hDC,int x,int y,int cx,int cy,
		int in_SrcX,int in_SrcY,
		int in_SrcWidth,int in_SrcHeight,DWORD in_Rop) const;

    座標(x,y)に現在のビットマップの(in_SrcX,in_SrcY)を左上とする
    幅in_SrcWidth,高さin_SrcHeightのビットマップを
    幅cx,高さcyにサイズ変更して転送します。

  ■ GetBits

	LPBYTE GetBits();

    ビットマップの画像ビットの先頭へのポインタを返します。

  ■ GetOffSet

	int CDIBitmap::GetOffSet(int x,int y) const

    指定した座標(x,y)を示す画像ビット上のオフセットを返します。
    1,2,4ビットのビットマップでは、1バイトが1ピクセル以上であるので、
    そのピクセル情報が含まれているアドレスのオフセットを返します。
    また、8ビット以上のビットマップでは、そのピクセルの
    先頭の値のアドレスへのオフセットを返します。
    無効なビット数のときは、-1が返ります。

  ■ Get4bitPixel

	char Get4bitPixel(int,int) const;

    指定した座標(x,y)のカラーインデックス値を返します。
    この関数は、16色ビットマップ専用で、それ以外の
    ビットマップのときは、常に0を返します。

  ■ Set4bitPixel

	int Set4bitPixel(int,int,unsigned char);

    指定した座標を指定したカラーインデックス値で置き換えます。
    画像ビットの値を変更するだけなので、
    描画に反映させるには、再度BitBltなどの描画関数を呼び出してください。
    ※ RefreshHandleは必要ありません。