モノクロビットマップを8ビットグレースケールにするには?

解決


OT  2008-10-24 01:18:40  No: 145358  IP: 192.*.*.*

お世話になります。

先日、ビットマップへの変更方法を伺ったものですが、また問題が発生しました。
保存したビットマップは、モノクロビットマップなのですが、それを8ビットのグレースケールにしなければならなくなりました。

何か、方法はありますでしょうか?

1ビットずつ見て、0なら&H00、1なら&HFFを入れる・・・?

編集 削除
ガッ  2008-10-24 08:27:50  No: 145359  IP: 192.*.*.*

とりあえず元記事です:
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+200810/08100021.txt

1. Graphics#FromImage()で256カラービットマップのグラフィックを作って
   そこにモノクロビットマップをGraphics#DrawImage()で書けないかな?
   →Graphicsを作れない(インデックス付きのピクセル形式をもつイメージからグラフィックス オブジェクトを作成することはできません。)

2. モノクロビットマップからBitmap#GetPixel()で色情報を受け取って,
   256カラービットマップに対応する色をBitmap#SetPixel()でなんとかならないかなー
   →256カラービットマップへはSetPixel()できない(SetPixel は、インデックス付きピクセル形式のイメージに対してサポートされていません。)

3. Bitmap#LockBits()でビットマップの生データを扱う.
   →これしかなさそう.

とりあえず,調べてみた限りを書いてみました.

編集 削除
OT  2008-10-25 01:18:54  No: 145360  IP: 192.*.*.*

ガッさん

解決しました。
3の方法を試してみましたが、うまくできませんでした。
次に自分の考えていた方法を試してみましたが、これもうまくいきませんでした。

ビットマップについて少し調べてみたところ、

・4バイト単位でないと、半端分が0埋めされる。
・ビットマップのビットの並びは、普通の並びではなく逆になっている。

上記のことがわかったので、それを踏まえた上で変換を行ったところ、うまくいきました。

ありがとうございました。
グラフィックは、他と比べて少し難しかったですが、ビットマップファイルの成り立ちなど、勉強になりました。

編集 削除