Преобразование изображений GDI + из метафайла в JPEG / GIF Приводит к появлению черного фона

StackOverflow https://stackoverflow.com/questions/1100928

Вопрос

Итак, я конвертирую метафайл (точнее, EMF) в формат jpeg или gif (не имеет значения, если он совместим с браузерами), и когда я выполняю преобразование, все прозрачные пиксели становятся черными.Я понятия не имею, как это сделать в GDI +, но вот метод, который я использую для сохранения файла:

Dim Img As System.Drawing.Imaging.Metafile = New System.Drawing.Imaging.Metafile(stream)
Img.Save(Server.MapPath("/FileName.gif"), System.Drawing.Imaging.ImageFormat.Gif)
Это было полезно?

Решение

загляните на веб-сайт Боба Пауэла.у него есть метрическая тонна всякой всячины GDI +.этот снимок сделан специально для trans GIF

Другие советы

Насколько я понимаю, метафайл не содержит информации для фона - он просто прозрачный.

Простой способ обойти это - просто раскрасить фон в нужный вам цвет.

Например.Приведенный ниже код создает растровое изображение того же размера, что и исходное изображение, рисует фон белым, а затем рисует изображение метафайла поверх фона.

        Rectangle imageRect = new Rectangle(0, 0, originalImage.Width, originalImage.Height);
        Bitmap newImage = new Bitmap(originalImage.Width, originalImage.Height);
        Graphics g = Graphics.FromImage(newImage );
        g.FillRectangle(new SolidBrush(Color.White), imageRect);
        g.DrawImage(originalImage, new Point(0, 0));

Насколько я понимаю, вам необходимо предоставить фреймворку информацию о формате изображения целевого И исходного изображений, чтобы альфа-каналы были переведены правильно.

В частности, информация о цвете:биты на пиксель и есть ли альфа для каждого пикселя, или прозрачный цвет, или единственное альфа-значение для всего изображения - что-то в этом роде.

Однако я не уверен, как это делается в VB (или вообще в .NET, если уж на то пошло) - я использую родной C ++ для этих типов операций ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top