2010-01-01 2 views
2

У меня есть файл png, который необходимо преобразовать в файл gif. В нем есть прозрачная часть, и когда я сохраняю ее, прозрачная часть становится черной вместо прозрачной. вот мой код:конвертировать png в gif с gdi + (C#)

FileStream imgStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write); 

Image.FromFile(imageInput).Save(imgStream, ImageFormat.Gif); 

здесь, imageinput является FULLPATH к моему PNG, и выходной файл является filefullpath с .gif расширением.

Вы видите, что это неправильно?

мишель

ответ

5

PNG использует альфа-прозрачность, а это означает, что каждый пиксель, в дополнении к его цвету, также содержит значение, обозначающее, как прозрачна она (называется alpha). Это позволяет полупрозрачным изображениям PNG.

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

Поэтому прозрачные части PNG будут окрашены в черный цвет, но полностью прозрачны.
Когда вы сохраняете GIF-файл, значение альфа игнорируется, что приводит к черному.

Вам необходимо пройти через пиксели изображения, заменив любой цвет, который имеет альфа 0 с Color.Transparent.

EDIT: Вам нужно позвонить MakeTransparent

+0

Привет, спасибо за ваш ответ. Теперь прозрачный цвет отображается как белый ... когда я делаю Color.Orange все прозрачные пиксели отображаются оранжевыми, но когда я делаю Color.Transparent, все прозрачные пиксели отображаются белыми. Может быть, проблема в том, что многие пиксели белые? Или я должен сказать, какой цвет должен быть прозрачным? – Michel

+0

глядя в intellisense узнал, что color.transparent на самом деле белый? есть ли способ сделать прозрачный цвет, например зеленым, и сказать gif, что «зеленый должен быть прозрачным»? – Michel

+0

Ах!makeTransparent сделал трюк. Благодарю. – Michel

2

GIF формат изображения не поддерживает альфа-прозрачность.

  • GIF поддерживает 24-битный RGB.
  • PNG поддерживает 32-разрядный RGBA.

A используется для указания прозрачности и Я бы предположил, что преобразователь игнорирует значение A.

PNG

GIF

+0

Что вы подразумеваете под этим? прозрачно в png что-то еще, чем прозрачное в gif? – Michel

3

Как и другие плакаты указали, GIF не поддерживает альфа-прозрачность - но одного цвета в GIF может быть установлен как полностью прозрачный. Вы можете преобразовать PNG в 256-цветную палитру растрового изображения и заменить любой полностью прозрачный (A = 255) на Colors.Transparent, а затем сохранить новое изображение как GIF.

См. ImageAttributes и ColorMap для получения дополнительной информации.

Смежные вопросы