Мне нужно иметь полупрозрачное изображение (используя альфа-смешение), нарисованное на полностью прозрачной форме - это означает, что изображение будет нарисовано поверх прозрачного содержимого.Полупрозрачное изображение на прозрачной форме
В настоящее время изображение всегда нарисовано над цветом фона окна, даже если само окно прозрачно.
Это текущее состояние, спасибо за любую помощь.
public Form1()
{
InitializeComponent();
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
MakeTransparent();
}
private void MakeTransparent()
{
NativeMethods.SetLayeredWindowAttributes(Handle, COLORREF.FromColor(BackColor), 255, Constants.ULW_ALPHA | Constants.ULW_COLORKEY);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= (Constants.WS_EX_LAYERED | Constants.WS_EX_TOOLWINDOW);
return cp;
}
}
private void OnPaint(object sender, PaintEventArgs e)
{
using (Bitmap bitmap = new Bitmap("c:\\semi-transparent.png"))
{
e.Graphics.DrawImage(bitmap, 0, 0);
}
}
Попробуйте отключить двойной буфер. – Ruud