お世話になります。
先日、ビットマップへの変更方法を伺ったものですが、また問題が発生しました。
保存したビットマップは、モノクロビットマップなのですが、それを8ビットのグレースケールにしなければならなくなりました。
何か、方法はありますでしょうか?
1ビットずつ見て、0なら&H00、1なら&HFFを入れる・・・?
とりあえず元記事です:
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()でビットマップの生データを扱う.
→これしかなさそう.
とりあえず,調べてみた限りを書いてみました.
ガッさん
解決しました。
3の方法を試してみましたが、うまくできませんでした。
次に自分の考えていた方法を試してみましたが、これもうまくいきませんでした。
ビットマップについて少し調べてみたところ、
・4バイト単位でないと、半端分が0埋めされる。
・ビットマップのビットの並びは、普通の並びではなく逆になっている。
上記のことがわかったので、それを踏まえた上で変換を行ったところ、うまくいきました。
ありがとうございました。
グラフィックは、他と比べて少し難しかったですが、ビットマップファイルの成り立ちなど、勉強になりました。
ツイート | ![]() |