Является ли исходное изображение полной альфа-версией или оно имеет прозрачный цвет / однобитную альфа-маску? Обычно однобитные альфа-изображения принимают цвет фона, часто белый, и просто исчезают. Ваше изображение выглядит точно так же, как вы, если вы рисуете однобитное альфа-изображение на не белом фоне.
Если вы используете однобитовый ключ прозрачности, вы получите «ореол», или, точнее, смешивание частично прозрачных значений с цветом фона форм. Таким образом, «гало» розовый в этой форме:
public class Form1 : Form
{
Image newImage;
public Form1()
{
this.BackColor = Color.Pink;
this.ClientSize = new Size(168, 168);
this.TransparencyKey = this.BackColor;
newImage = Image.FromFile(Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
"dot-mac-logo.png"));
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(newImage, 20, 20);
}
}
Поэтому не используйте прозрачность в битах с полными альфа-изображениями - я не совсем уверен, как это сделать в C #, но в C вы бы использовали UpdateLayeredWindow
MSDN Я сделал ранее , чтобы указать альфа-смешение между внеэкранным DC и поверхностью окна.
Пример использования UpdateLayeredWindow
из C # в этом блоге MSDN .