C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

BitmapをGif形式で色むらなく保存する方法 /ミルフィーユ (19/01/08(Tue) 22:40) #89854
Re[1]: BitmapをGif形式で色むらなく保存する方法 /Hongliang (19/01/08(Tue) 23:30) #89856
  └ Re[2]: BitmapをGif形式で色むらなく保存する方法 /ミルフィーユ (19/01/09(Wed) 22:28) #89866
    └ Re[3]: BitmapをGif形式で色むらなく保存する方法 /ミルフィーユ (19/01/09(Wed) 22:29) #89867 解決済み


親記事 / ▼[ 89856 ]
■89854 / 親階層)  BitmapをGif形式で色むらなく保存する方法
□投稿者/ ミルフィーユ (1回)-(2019/01/08(Tue) 22:40:07)

分類:[.NET 全般] 

こんにちは。
VB2013のBitmapクラスを使用して画像を保存しています。
画像には、黒の罫線・黒の文字描画の他、
単色(黄緑色に近い)で塗りつぶした丸模様をいくつか描いています。
色自体はそんなに多く使っていません。
(せいぜい、アンチエイリアスされる部分で色が増える程度です。)

これをGif形式で保存すると、単色で塗りつぶした丸模様の色が均一でなく、
うっすらと色むらのような感じになります。

Gif形式は色制限があるため、BitmapクラスのGif変換では
独自の方法で減色を行っているのだと思いますが、
もうちょっと何とかならないか、と考えています。

元の色数が少ないという前提で、塗りつぶし箇所の色むらが出ないように、
VBを使ってGif形式で保存する方法はあるでしょうか?
[ □ Tree ] 返信 編集キー/

▲[ 89854 ] / ▼[ 89866 ]
■89856 / 1階層)  Re[1]: BitmapをGif形式で色むらなく保存する方法
□投稿者/ Hongliang (738回)-(2019/01/08(Tue) 23:30:30)
まず、自力でやるのであれば、
・縦横同サイズの8bppIndexedのBitmapを新たに作成
・元Bitmapと新BitmapをそれぞれLockBitsして、元から新へ1ピクセルずつ移植
・ついでに元Bitmapの使用している色を新BitmapのPaletteに採っていく
というような処理を行うことになりますね。

System.Windows.Media.Imaging.GifBitmapEncoderを使えばBitmap::Saveよりはマシな減色が行われるというのを目にしました。

NuGetでgifで探せば良い感じのライブラリがあるかも知れません。
[ 親 89854 / □ Tree ] 返信 編集キー/

▲[ 89856 ] / ▼[ 89867 ]
■89866 / 2階層)  Re[2]: BitmapをGif形式で色むらなく保存する方法
□投稿者/ ミルフィーユ (2回)-(2019/01/09(Wed) 22:28:10)
Hongliang様、コメントありがとうございます。
まずは簡易にBitmapをPng形式でMemoryStreamに保存し、
これをGifBitmapEncoderでGif形式でファイル保存したところ、
確かに色ムラは少しはマシになりましたが、
まだ薄いまだら模様が残っています。

そこで、自力でやろうかと思いますが、
下手したら減色をやらなければならないかも知れません。
ただ、目的としては塗りつぶしの箇所がきれいになればよいので、
それ以外の部分はBitmapクラスでGif化したもので十分です。
そこで、Hongliang様の自力方法を応用し、
例えば元の画像(24bit)とBitmapでGif化したものを用意し、
元の画像の任意のピクセルの色がGif化画像のパレットに含まれていれば
その色を採用する、みたいなことをやろうと思います。
[ 親 89854 / □ Tree ] 返信 編集キー/

▲[ 89866 ] / 返信無し
■89867 / 3階層)  Re[3]: BitmapをGif形式で色むらなく保存する方法
□投稿者/ ミルフィーユ (3回)-(2019/01/09(Wed) 22:29:08)
No89866 (ミルフィーユ さん) に返信

解決済み
[ 親 89854 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -