GDI + Imagem conversão de Metafile para JPEG / Resultados GIF em fundo preto
-
11-09-2019 - |
Pergunta
Então, eu estou convertendo um Metafile (EMF para ser exato) a um jpeg ou gif (não importa, desde que seja compatível com os navegadores) e quando eu fizer a conversão, todos os pixels transparentes ficar preta. Eu não tenho nenhuma idéia de como fazer isso em GDI +, mas aqui é o método que estou usando para salvar o arquivo:
Dim Img As System.Drawing.Imaging.Metafile = New System.Drawing.Imaging.Metafile(stream)
Img.Save(Server.MapPath("/FileName.gif"), System.Drawing.Imaging.ImageFormat.Gif)
Solução
confira o site do Bob Powel. ele tem um-porcaria-tonelada métrica de GDI + coisas. este é especificamente para o trans GIF
Outras dicas
Pelo que entendi o metarquivo não contém informações para o fundo - é simplesmente transparente.
Um trabalho simples de contornar é a cor simplesmente a fundo a cor que você quiser.
por exemplo. O código a seguir cria um bitmap do mesmo tamanho que a imagem original, desenha o fundo branco e, em seguida, desenha a imagem de metarquivo no topo do fundo.
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));
O meu entendimento é que você precisa para fornecer informações para o enquadramento, em relação ao formato de imagem das imagens de destino e origem, a fim de alfa canais a ser traduzido corretamente.
Informações Especificamente cor: bits por pixel e se há ou não é alfa por pixel ou uma cor transparente ou um valor alfa único para toda a imagem - coisas assim.
No entanto, eu não estou certo de como isso é feito em VB (ou em .NET em tudo para que o assunto) - eu uso C ++ nativo para estes tipos de operações ...