У меня есть приложение, которое позволяет пользователям создавать простые изображения, которые представляют собой не более чем текст с желаемым цветом фона.Пользователи могут выбрать цвет из System.Windows.Forms.ColorDialog
и использовать его для установки цвета текста и цвета фона.
Цвет фона можно установить прозрачным (я использую Color.Transparent
в качестве эталона для прозрачности) и после выбора я обновляю изображение предварительного просмотра, которое правильно отображает текст и прозрачность.Однако, когда я иду сохранить изображение, я не могу получить прозрачность для сохранения с изображением в формате GIF.
Я нашел эту статью , в которой говорится, что я должен использовать MakeTransparent
метод для установки цвета прозрачности.
Перед тем, как вызвать операцию Save, я беру изображение, которое находится в памяти, и перерисовываю его, используя черный в качестве фона / прозрачного цвета, а затем перед тем, каксохраните изображение, вызовите метод MakeTransperent
для изображения в памяти.Тем не менее, изображение сохраняется с черным в качестве фона.
Что я могу сделать не так?
РЕДАКТИРОВАТЬ: Вот соответствующий код.
Этометод, который создает изображение.Переменная overrideBG
используется, чтобы указать, следует ли нам устанавливать цвет прозрачности не-альфа-цвета для GIF.
void ReDrawImage(bool overrideBG = false) //My method that draws the image in memory.
{
//My In Memory Image creation
img = new Bitmap(sz.Width, sz.Height);
Graphics gfx = Graphics.FromImage(img);
...
//This portion of code sets the BG color to what should be the transparency color, if the BG is transparent
if (overrideBG)
{
gfx.Clear(TransparentColor); //TransparentColor = Black, unless Text Color is Black. If so, it equals White.
}
else
{
gfx.Clear(BackColorPreview.BackColor);
}
//Followed by code that writes the text.
}
//This is the save method (Assume we are always drawing a transparent background.)
Save()
{
ReDrawImage(true);
img.MakeTransparent(TransparentColor); //I've also tried moving this line before the ReDrawImage call
img.Save(SaveFile.FileName, ImageFormat.Gif);
ReDrawImage();
}