Преобразование изображений GDI + из метафайла в JPEG / GIF Приводит к появлению черного фона
-
11-09-2019 - |
Вопрос
Итак, я конвертирую метафайл (точнее, 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 ++ для этих типов операций ...