为什么SolidBrush会产生图案图像?

时间:2008-11-12 18:31:38

标签: .net graphics colors gif

我正在尝试在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”时得到的结果示例:

imageshack http://img148.imageshack.us/img148/8936/colorcb5.png

(左边的块是一个背景颜色设置为#415976的HTML SPAN。右边的块是我的图形,你可以在那里看到抖动的颜色。)

如果我使用此代码,结果是一样的:

g.Clear(ColorTranslator.FromHtml("#" + color));

代替上述方法中的g.FillRectangle调用。

更新:默认情况下,如果对位图进行任何编程更改,GDI +会使用web safe palette保存GIF。这是导致我的非安全调色板颜色抖动的原因。我能够修改下面Marco的帖子(http://msdn.microsoft.com/en-us/library/aa479306.aspx)中引用的代码来修改我新创建的图像上的调色板,以便我的颜色得到尊重。

2 个答案:

答案 0 :(得分:2)

据我所知,

GIF文件限制为256色,因此它采用抖动方式。 PNG可能是您需要的格式。

或者您可以查看here使用复杂量化器构建自定义调色板的解决方案(我不对链接中的代码负责,从不尝试过自己)。

other link from Microsoft对此问题进行了深入分析。

希望这有帮助。

答案 1 :(得分:0)

IIRC GIF仅限于.NET上的特定托盘。有解决方法,但它们超出了我的理解。