DOBON.NET DOBON.NETプログラミング掲示板過去ログ

画像をGIFで保存した時の画質

環境/言語:[.NET Framework 1.1]
分類:[.NET]

System.Drawing.Imaging.ImageFormat.Gif で画像を保存した場合、
網が掛かったような感じで画質が劣化するのですが、
解決方法はあるのでしょうか?

その他のフォーマット(BMP、JPEG、TIFF、PNG)はいずれもきれいに保存できます。

よろしくお願いいたします。
GIF は最高 256 色までしか使えませんので、多分減色処理が間に入ってるんじゃないでしょうか。
これは GIF を使う以上どうしようもない制限です。
早速の書き込みありがとうございます。

> GIF は最高 256 色までしか使えませんので、多分減色処理が間に入ってるんじゃないでしょうか。
> これは GIF を使う以上どうしようもない制限です。

256 色までしか使えないことは知っていますが、
GIF画像を読み込んでそのまま何もしないで保存しているのに
減色されてしまうのでしょうか?

元画像がGIFなので色数の問題はないはずですので
減色されずに保存することは出来ないのでしょうか?

それともビットマップオブジェクトを作成した段階で色数が変わっているのでしょうか?

処理は、一旦ピクチャーボックスに表示し、保存ボタン押下で保存しています。
ピクチャーボックスにはきれいに表示されています。

画像を表示している部分
===================================================================
Dim bmp As Bitmap = New Bitmap(strFilePath)
Dim intW As Integer = bmp.Width
Dim intH As Integer = bmp.Height
PictureBox1.Width = intW
PictureBox1.Height = intH
Dim g As Graphics
PictureBox1.Image = New Bitmap(intW, intH)
g = Graphics.FromImage(PictureBox1.Image)
g.DrawImage(bmp, 0, 0, intW, intH)
===================================================================
保存ボタン押下処理
==================================================================
PictureBox1.Image.Save(strNewPath, System.Drawing.Imaging.ImageFormat.Gif)

よろしくお願いいたします。
> GIF画像を読み込んでそのまま何もしないで保存しているのに
何もしないで保存、というのであれば、
 Dim bmp As Bitmap = New Bitmap(strFilePath)
 bmp.Save(strNewPath)
となるべきですよね。

> 減色されてしまうのでしょうか?
今回は、New Bitmap(intW, intH) で新たに生成されたキャンパスに、
描画しているのですから、元々の PixelFormat 等が異なりますよね。


以下、gif の カラーテーブル関連という事で参考までに。
http://support.microsoft.com/kb/319061/en-us
魔界の仮面弁士さん
いつもこの掲示板でお世話になっています。

> 何もしないで保存、というのであれば、
正確には何もしない訳ではないのですが・・・
でも工夫の余地はありそうです。(私は頭が固いとつくづく感じます)

> 今回は、New Bitmap(intW, intH) で新たに生成されたキャンパスに、
> 描画しているのですから、元々の PixelFormat 等が異なりますよね。

言われてみればその通り、当たり前ですよね。

> 以下、gif の カラーテーブル関連という事で参考までに。
> http://support.microsoft.com/kb/319061/en-us

ありがとうございます。
このサイトを参考にして勉強します。
2006/04/05(Wed) 16:40:51 編集(投稿者)
2006/04/05(Wed) 16:24:08 編集(投稿者)

魔界の仮面弁士さんに紹介頂いたページは using Visual C# でしたので
VB に変換して勉強していましたが、
Using Visual Basic .NET のページがありましたので
現在そちらで勉強しています。

HOW TO: Save a .gif File with a New Color Table By Using Visual Basic .NET
http://support.microsoft.com/default.aspx?scid=kb;en-us;319591

解決方法も、サンプルコードもこのページに書かれていますので、どこまで私が理解し、実現できるかは別にして、一応解決です。
(現在は英語と格闘中です)

よく見たら翻訳ページもありました。
http://support.microsoft.com/kb/319591/ja

ということで、解決済みにします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板