Почему SolidBrush приводит к изображению с рисунком? - PullRequest
1 голос
/ 12 ноября 2008

Я пытаюсь динамически генерировать GIF-изображение указанного размера и цвета в HttpHandler. По какой-то причине изображение генерируется с использованием цветного рисунка, а не сплошного цвета, который я ожидал создать 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

(Блок слева представляет собой HTML SPAN с цветом фона, установленным на # 415976. Блок справа - это мой рисунок, на котором вы можете видеть размытые цвета.)

Результат тот же, если я использую этот код:

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

вместо вызова g.FillRectangle в методе выше.

ОБНОВЛЕНИЕ: По умолчанию GDI + сохраняет GIF-файлы с помощью веб-безопасной палитры , если в растровое изображение вносятся какие-либо программные изменения. Это и стало причиной того, что моя небезопасная палитра цветов стала размытой. Мне удалось изменить код, указанный в посте Марко ниже (http://msdn.microsoft.com/en-us/library/aa479306.aspx), чтобы изменить палитру на только что созданном изображении, чтобы мой цвет уважали.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2008

GIF-файлы ограничены 256 цветами, насколько я знаю, поэтому они прибегают к размыванию. PNG - это, вероятно, нужный вам формат.

Или вы можете здесь найти решение, использующее сложный квантователь для создания пользовательской палитры (я не беру ответственности за код в ссылке, никогда не пробовал сам)

Эта другая ссылка от Microsoft содержит подробный анализ проблемы.

Надеюсь, это поможет.

0 голосов
/ 12 ноября 2008

GIF IIRC ограничены определенным поддоном в .NET. Есть обходные пути, но они были выше моего понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...