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

Итак, я конвертирую метафайл (точнее, 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)

Ответы [ 3 ]

6 голосов
/ 09 июля 2009

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

1 голос
/ 06 апреля 2010

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

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

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

        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));
0 голосов
/ 09 июля 2009

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

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

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

...