Зарегестрированые типы, Сохранение в gif
От: Flap Россия  
Дата: 15.02.07 10:35
Оценка:
Доброго времени суток всем.

У меня созрела вот какая проблема, пишу на С#:

1) Я имею имя файла (с расширением). по которому вытаскиваю из системы ассоциированную с ним иконку в виде Bitmap. Для этого я использую импортированую SHGetFileInfo и Bitmap.FromHicon(...).
2) После чего я сохраняю ето дело на диск в виде GIF используя стандартную Bitmap.Save("путь/имя.gif",ImageFormat.Gif)
3) Сохраненная картинка очень ПЛОХОГО качества (много черных крапинок и на черном фоне). Хотя когда я ее отображаю его на какой нить PictureBox, то оно отображается великолепно.
4) На сколько я понимаю это проблема с прозрачностью фона, но решить я ее не могу.
5) Я облазил все что мог. В инете не чего путнего не нашел, а если и нашел, то не понял как это можно применить к моей ситуации.

Очеь прошу подсказать в чем всетаки дело и... как эту проблему решить?.

P.S. если сохранять в формат .png, то картинка сохраняется так же великолепно.
Re: Зарегестрированые типы, Сохранение в gif
От: Flap Россия  
Дата: 15.02.07 17:54
Оценка:
ну?
Re: Зарегестрированые типы, Сохранение в gif
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.02.07 10:52
Оценка:
Здравствуйте, Flap, Вы писали:

F>Доброго времени суток всем.


F>У меня созрела вот какая проблема, пишу на С#:


F>1) Я имею имя файла (с расширением). по которому вытаскиваю из системы ассоциированную с ним иконку в виде Bitmap. Для этого я использую импортированую SHGetFileInfo и Bitmap.FromHicon(...).

F>2) После чего я сохраняю ето дело на диск в виде GIF используя стандартную Bitmap.Save("путь/имя.gif",ImageFormat.Gif)
F>3) Сохраненная картинка очень ПЛОХОГО качества (много черных крапинок и на черном фоне). Хотя когда я ее отображаю его на какой нить PictureBox, то оно отображается великолепно.
F>4) На сколько я понимаю это проблема с прозрачностью фона, но решить я ее не могу.
F>5) Я облазил все что мог. В инете не чего путнего не нашел, а если и нашел, то не понял как это можно применить к моей ситуации.

F>Очеь прошу подсказать в чем всетаки дело и... как эту проблему решить?.

Дело, скорее всего, в том, что используемый вариант метода Save выставляет настройки "по умолчанию", которые дают слишком позорный результат.
Точного рецепта у меня нет, но есть соображения, куда можно покопать. Копать стоит в сторону метода
Image.Save(Stream, ImageCodecInfo, EncoderParameters)


примерно вот таким образом нужно действовать:
// 1. Получить кодек для GIF
ImageCodecInfo gif;
foreach(ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders())
{
    if (codec.MimeType == "image/gif")
    {
        gif = codec;
        break;
    }
}
//2. Выставить параметры преобразования:
EncoderParameters params = new EncoderParameters(2);
params[0] = new EncoderParam(Encoder.ColorDepth, 8L);
params[1] = new EncoderParam(Encoder.Quality, 100L);
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.