Я пытаюсь преобразовать изображение PNG в формат GIF и JPG. Я использую код, который я нашел в документации Microsoft .
Я создал git -hub пример , изменив этот код следующим образом:
public static void Main(string[] args)
{
// Load the image.
using (Image png = Image.FromFile("test-image.png"))
{
var withBackground = SetWhiteBackground(png);
// Save the image in JPEG format.
withBackground.Save("test-image.jpg");
// Save the image in GIF format.
withBackground.Save("test-image.gif");
withBackground.Dispose();
}
}
private static Image SetWhiteBackground(Image img)
{
Bitmap imgWithBackground = new Bitmap(img.Width, img.Height);
Rectangle rect = new Rectangle(Point.Empty, img.Size);
using (Graphics g = Graphics.FromImage(imgWithBackground))
{
g.Clear(Color.White);
g.DrawImageUnscaledAndClipped(img, rect);
}
return imgWithBackground;
}
Исходное изображение (вымышленные данные) выглядит так:
И когда я преобразую его в gif, я получаю это:
Итак, мой вопрос: есть ли способ получить формат gif из png, который бы выглядел одинаково?
Редактировать: Ганс Пассант указал, что root проблема была в прозрачном фоне. После некоторых копаний я нашел ответ здесь . Я использовал фрагмент кода, упомянутый в ссылке, чтобы установить белый фон:
private Image SetWhiteBackground(Image img)
{
Bitmap imgWithBackground = new Bitmap(img.Width, img.Height);
Rectangle rect = new Rectangle(Point.Empty, img.Size);
using (Graphics g = Graphics.FromImage(imgWithBackground))
{
g.Clear(Color.White);
g.DrawImageUnscaledAndClipped(img, rect);
}
return imgWithBackground;
}
Так что теперь GIF выглядит так: