//この記事はwww.blue1000.comによって翻訳されており、元のアドレスはhttp://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspxです。
//他人の努力の成果を尊重し、転載する場合は出典を明記してください。
GDI+ はプログラムを作成するときによく使用され、暗い 32 bpp の画像を gif ファイルとして保存でき、そのプロセスは比較的簡単です。また、CreateThumnailImage メソッドを使用してこの gif 画像を保存する前に、そのサイズを調整することもできます。
よく使用されるコード:
上記のコードは gif ファイルの描画と保存を完了できますが、すぐに問題が見つかります。 .gif ファイルの画質は私たちの期待をはるかに下回っています。
効果画像:
上に示した低品質で粒子の粗い画像には、「色の量子化」処理 (パレット化) も必要です。これは、GDI+ が画像自体の実際の色を考慮せずに、デフォルトで 256 色を使用するために発生します。
その後、独自の「パレット」を作成しようとしましたが、結果はさらに悪かったです:)。優れた「カラー量子化」アルゴリズムでは、2 つのピクセル パーティクルの間の空間を 2 つのピクセルの色に似た遷移カラーで埋めることを考慮して、より目に見える色空間を提供する必要があります。
これが「オクツリー」アルゴリズムです。 「Octree」アルゴリズムを使用すると、独自のアルゴリズムをプラグインして画像を量子化できます。
ここでは、役立つと思われる Microsoft の 2 つの記事を紹介します。KB 319061とASP.NET 画像のカラー量子化の最適化(Morgan Skinner 著、Microsoft) です。 Morgan Skinner は優れた「Octree」アルゴリズム コードを提供しており、参照用にダウンロードできます。
OctreeQuantizer の使用は簡単です。
System.Drawing.Bitmap b = new System.Drawing.Bitmap(“c:\original_image.gif”);
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
OctreeQuantizer クオンタイザー = new OctreeQuantizer (255, 8) ;
(量子化されたビットマップ = quantizer.Quantize (thmbnail) ) を使用します。
{
quantized.Save(“c:\thumnail.gif”, System.Drawing.Imaging.ImageFormat.Gif);
OctreeQuantizer
greyquantizer = new GrayscaleQuantizer ();
(量子化されたビットマップ = greyquantizer.Quantize ( thmbnail ) )
{
quantized.Save(“c:\thumnail.gif”, System.Drawing.Imaging.ImageFormat.Gif);
効果の画像は次のとおりです (はるかに美しくなりましたか?)
。