Ресайз картинки (gif-формат)
Создаю объект класса Image
Image image = _createImage(MainImage.PostedFile.InputStream);
ImageFormat format = image.RawFormat;
//вычисляю нужный размер картинки
Bitmap result = new Bitmap(resultWidth, resultHeight);
result.MakeTransparent(Color.White);
Graphics graphics = Graphics.FromImage(result);
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.DrawImage(image, 0, 0, resultWidth, resultHeight);
graphics.Flush();
//Сохраняю картинку в gif-формате (она изначальна была такой)
MemoryStream stream = new MemoryStream();
result.Save(stream, ImageFormat.Gif);
Всё происходит хорошо. Но как известно у гифа есть возможность прозрачного фона, так вот такие картинки у которых прозрачный фон сохраняются очень странно. За место прозрачного фона появляется чёрный фон.
Как сделать так, чтобы прозрачный фон оставался прозрачным???
Попробуй при вызове MakeTransparent передать не Color.White а Color.Transparent
Всё равно чёрный фон :(
И стоит убедиться, что выводящая программа/функция поддерживает прозрачный фон.
context.Response.Clear();
context.Response.OutputStream.Write(bytes, 0, bytes.Length);
Явно указывал
context.Response.ContentType = "image/gif";
не помогает.
По поводу graphics.TranslateTransform()
чё-то прочитал в MSDN, написано:
"Осуществляет заданный перевод матрицы преобразования данного объекта Graphics в указанном порядке"
смотрю как баран на новые ворота, ничего не понял, какой порядок?
Ну попробовал применил наугад
graphics.TranslateTransform(0.0F, 0.0F);
Проблема осталась. Нашёл статейку
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q319061
Там написано, что надо менят таблицу цветов у гиф-файла, и чуть ли не по каждому пикселю анализировать картинку, одновременно с этим написано, что это происходит несколько долго. И как быть?
P.S. Извеняюсь за тупость, как-то с GDI+ не приходилось особенно тесно сталкиваться.