Доброго времени суток всем.
У меня созрела вот какая проблема, пишу на С#:
1) Я имею имя файла (с расширением). по которому вытаскиваю из системы ассоциированную с ним иконку в виде Bitmap. Для этого я использую импортированую SHGetFileInfo и Bitmap.FromHicon(...).
2) После чего я сохраняю ето дело на диск в виде GIF используя стандартную Bitmap.Save("путь/имя.gif",ImageFormat.Gif)
3) Сохраненная картинка очень ПЛОХОГО качества (много черных крапинок и на черном фоне). Хотя когда я ее отображаю его на какой нить PictureBox, то оно отображается великолепно.
4) На сколько я понимаю это проблема с прозрачностью фона, но решить я ее не могу.
5) Я облазил все что мог. В инете не чего путнего не нашел, а если и нашел, то не понял как это можно применить к моей ситуации.
Очеь прошу подсказать в чем всетаки дело и... как эту проблему решить?.
P.S. если сохранять в формат .png, то картинка сохраняется так же великолепно.
Здравствуйте, 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