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