独自形式のデータとHBITMAPを相互変換することも出来ます。
よろしければ使ってみてください。
関数リファレンスを載せておきます。
・bmp_t* bmpMake(int width,int height)
BMPデータを作成します。
作成に失敗するとNULLが返ります。
・bmp_t* bmpCopy(const bmp_t* source)
入力したBMPデータと同じ内容のBMPデータを作成します。
作成に失敗するとNULLが返ります。
・bmp_t* bmpLoad(const char* filename)
BMPデータをファイルから読み込み、作成します。
作成に失敗するとNULLが返ります。
・int bmpErrorDiffusion(bmp_t* bmp,int type)
指定したBMPデータに対してError Diffusionを適用します。
typeでカラータイプを指定します。
BMP_256 256色です。
BMP_16 16色です。
BMP_MONO モノクロです。
強制的にデフォルトのカラーパレットが使用されます。
成功すると1、失敗すると0が返ります。
・int bmpSave(const bmp_t* bmp,const char* filename,int type,int cttype,const rgb_t* ct)
BMPデータをファイルに保存します。
typeでカラータイプを指定します。
BMP_FULL フルカラーです。
BMP_256 256色です。
BMP_16 16色です。
BMP_MONO 2色です。
cttypeでカラーパレットの作成方法を指定します。
typeがBMP_FULLの時は無視されます。
COLORTABLE_DEFAULT デフォルトのカラーパレットが使用されます。
COLORTABLE_AUTODETECT 使われている色を含むカラーパレットを自動生成します。
COLORTABLE_INPUT カラーパレットをctで指定します。
ctではカラーパレットをrgb_t型の配列で指定します。
ctにはあらかじめ十分な要素数(色数以上)を確保してください。
cttypeがCOLORTABLE_AUTODETECTでないときは無視されます。
rgb_t型の構造は以下の通りです。
typedef struct {
unsigned char r;
unsigned char g;
unsigned char b;
} rgb_t;
成功すると1、失敗すると0が返ります。
・bmp_t* bmpLoadFromHandle(HDC hDC,HBITMAP hBmp)
HBITMAPからBMPデータを作成します。
hDCとhBmpで元となるデータを指定します。
hBmpはデバイスコンテキストに関連付けられていない状態で渡してください。
作成に失敗するとNULLが返ります。
・HBITMAP bmpSaveToHandle(HDC hDC,const bmp_t* bmp)
BMPデータからHBITMAPを作成します。
hDCでHBITMAPの元となるデバイスコンテキストを指定します。
作成に失敗すると0が返ります。
作成したHBITMAPはDeleteObject関数で破棄してください。
・void bmpFree(bmp_t* bmp)
作成したBMPデータを開放します。
サンプルアプリ、サンプルアプリのソースコードが入っています。
感想や意見、改善点などがありましたらお気軽にコメントを下さい。
「使ってみた」という報告だけでもありがたいです。
よろしくお願いします。