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

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

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

BitmapをGif形式で色むらなく保存する方法

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■89854 / inTopicNo.1)  BitmapをGif形式で色むらなく保存する方法
  
□投稿者/ ミルフィーユ (1回)-(2019/01/08(Tue) 22:40:07)

分類:[.NET 全般] 

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

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

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

元の色数が少ないという前提で、塗りつぶし箇所の色むらが出ないように、
VBを使ってGif形式で保存する方法はあるでしょうか?
引用返信 編集キー/
■89856 / inTopicNo.2)  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で探せば良い感じのライブラリがあるかも知れません。
引用返信 編集キー/
■89866 / inTopicNo.3)  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化画像のパレットに含まれていれば
その色を採用する、みたいなことをやろうと思います。
引用返信 編集キー/
■89867 / inTopicNo.4)  Re[3]: BitmapをGif形式で色むらなく保存する方法
□投稿者/ ミルフィーユ (3回)-(2019/01/09(Wed) 22:29:08)
No89866 (ミルフィーユ さん) に返信

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ