Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ресайз картинки (gif-формат)

422
01 ноября 2006 года
Dimarik
181 / / 12.02.2005
На странице есть форма, у которой имеется возможность закачивать файлы (FileUpload), при закачивании должен производиться ресайз картинки. Делаю так:

Создаю объект класса 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);

Всё происходит хорошо. Но как известно у гифа есть возможность прозрачного фона, так вот такие картинки у которых прозрачный фон сохраняются очень странно. За место прозрачного фона появляется чёрный фон.
Как сделать так, чтобы прозрачный фон оставался прозрачным???
273
01 ноября 2006 года
3A3-968M
1.2K / / 22.12.2005
Попробуй при вызове MakeTransparent передать не Color.White а Color.Transparent
422
01 ноября 2006 года
Dimarik
181 / / 12.02.2005
Всё равно чёрный фон :(
547
02 ноября 2006 года
Hydra
488 / / 20.06.2006
А свойства какого-нть у graphics типа TransparentColor нет случайно?
И стоит убедиться, что выводящая программа/функция поддерживает прозрачный фон.
422
02 ноября 2006 года
Dimarik
181 / / 12.02.2005
Вывод происходит при помощи хэндлера, в котором из БД берётся поле типа image, в результате имеем массив байтов. И выводим в общий поток

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+ не приходилось особенно тесно сталкиваться.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог