我正在尝试在 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();
}
这是我在颜色参数中传递“415976”时得到的结果示例:
图像黑客 http://img148.imageshack.us/img148/8936/colorcb5.png
(左边的块是一个 HTML SPAN,背景颜色设置为 #415976。右边的块是我的图形,您可以在其中看到抖动的颜色。)
如果我使用这段代码,结果是一样的:
g.Clear(ColorTranslator.FromHtml("#" + color));
代替上述方法中的 g.FillRectangle 调用。
更新:默认情况下,如果对位图进行任何编程更改,GDI+ 会使用Web 安全调色板保存 GIF。这就是导致我的非安全调色板颜色抖动的原因。我能够修改下面 Marco 的帖子 ( http://msdn.microsoft.com/en-us/library/aa479306.aspx ) 中引用的代码,以修改我新创建的图像上的调色板,以便尊重我的颜色。