ビットマップの取り扱い

[戻る]
みやちゃん 2007/02/09(金) 08:58:39
ビットマップの取り扱いはじめてです。
BITMAPファイル 1280×1024 0−255諧調 モノクロのピクセルデータを
読み、諧調の変更後にBITMAPファイルに0−255諧調 モノクロで書き込みたいの
ですが、確認すると変更時の画像になりません。
以下の内容書き込みしてます。

 //カラーテーブルを取得。
    hDC = GetDC(hwnd);
    GetSystemPaletteEntries(hDC, 0, 256, pe);
    for (int i = 0; i < 256; i++) {
          lpInfo->bmiColors[i].rgbRed = pe[i].peRed;
    lpInfo->bmiColors[i].rgbGreen =pe[i].peGreen;
    lpInfo->bmiColors[i].rgbBlue =pe[i].peBlue;
    lpInfo->bmiColors[i].rgbReserved = 0;
        }
    /* ビットマップのヘッダ作成 */
    lpHead->bfType='M'*256+'B';
    lpHead->bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+dwLength*dwHeight;
    lpHead->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+4*256;
    lpInfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
    lpInfo->bmiHeader.biWidth=dwWidth;
    lpInfo->bmiHeader.biHeight=dwHeight;
    lpInfo->bmiHeader.biPlanes=1;
    lpInfo->bmiHeader.biBitCount=8;

シャノン 2007/02/09(金) 09:14:03
> 確認すると変更時の画像になりません。

で、どうなってんですか?

> GetSystemPaletteEntries(hDC, 0, 256, pe);

モノクロ(というか、階調を持つんだからグレースケールって言うべきだろうけど)な
のに、なんでシステムパレット使ってるんです?

PATIO 2007/02/09(金) 11:32:01
256階調のグレースケールと言うのは結局の話、グレースケールのパレットを持った
256色のビットマップと言う事です。
別に白黒2値と言う訳ではないので、256カラーのビットマップと別段変わるわけでも
ありません。単純な話で行けば、元のビットマップのパレットをグレースケール化するだ
けでも行けそうな気がします。
試していないので御自分で確認して見てください。

古いスレッドには追加発言できません。