HttpHandler で指定されたサイズと色の gif 画像を動的に生成しようとしています。何らかの理由で、イメージは、 SolidBrushが作成する予定のソリッド カラーではなく、ディザリングされたカラー パターンで生成されています。次のコードは、問題を明らかにすることができる最も単純なものです。
private void GenerateSquareImage(String filename, String color, Int32 width)
{
Bitmap img = new Bitmap(width, width);
Graphics g = Graphics.FromImage(img);
SolidBrush brush = new SolidBrush(ColorTranslator.FromHtml("#" + color));
g.FillRectangle(brush, 0, 0, width, width);
img.Save(filename, System.Drawing.Imaging.ImageFormat.Gif);
img.Dispose();
brush.Dispose();
g.Dispose();
}
color パラメーターに「415976」を渡したときに得られる結果のサンプルを次に示します。
イメージシャック http://img148.imageshack.us/img148/8936/colorcb5.png
(左側のブロックは、背景色が #415976 に設定された HTML SPAN です。右側のブロックは私のグラフィックで、ディザリングされた色を確認できます。)
このコードを使用した場合、結果は同じです。
g.Clear(ColorTranslator.FromHtml("#" + color));
上記のメソッドの g.FillRectangle 呼び出しの代わりに。
更新:デフォルトでは、ビットマップにプログラムによる変更が加えられた場合、GDI+ はWeb セーフ パレットを使用して GIF を保存します。これが、安全でないパレットの色がディザリングされる原因でした。以下の Marco の投稿 ( http://msdn.microsoft.com/en-us/library/aa479306.aspx ) で参照されているコードを変更して、新しく作成した画像のパレットを変更し、色が尊重されるようにすることができました。