答案 0 :(得分:0)
如果我是正确的,这是使用TransparencyKey而不是GDI +的固有问题。尝试使用TransparencyKey执行相同的过程,但使用GDI +在表单的画布上绘制,而不是向下绘制图像。
您可以在表单的绘制事件中绘制图像。您可以随时致电this.Invalidate();
作为一些指导,您的paint事件将需要使用Graphics类。您可以使用Graphics g = this.CreateGraphics();
然后您可以执行g.Draw...();
之类的操作。检查文档以获得更多帮助或评论我的答案,我可以指出正确的方向。
答案 1 :(得分:0)
规则是:选择罕见的TranparencyKey
颜色,如Color.Fuchsia
,然后设置form.BackColor = form.TransparencyKey
。只要您的图片不包含a)半透明或b)TransparencyKey
颜色
这将创建并打开一个简单的表单,其中包含BackgroundImage
和Paint
事件,可将第二张图片绘制到表单上。
正如您所见,透明度工作正常。正如您所看到的,背景图像(图表中)确实有一小部分消除锯齿的像素,让TransparencyKey / BackColor像素闪耀:
private void button35_Click_1(object sender, EventArgs e)
{
Form form = new Form();
//form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
//form.MaximizeBox = false;
//form.MinimizeBox = false;
//form.ControlBox = false;
form.BackColor = Color.Fuchsia;
form.TransparencyKey = form.BackColor;
form.BackgroundImage = Image.FromFile("D:\\pie.png");
form.Paint += form_Paint;
//form.MouseDown += form_MouseDown;
form.Show();
}
void form_Paint(object sender, PaintEventArgs e)
{
using (Image img = Image.FromFile("D:\\proj.png"))
e.Graphics.DrawImage(img, Point.Empty);
}
//void form_MouseDown(object sender, MouseEventArgs e)
//{
// if (e.Button == MouseButtons.Left)
// {
// ReleaseCapture();
// SendMessage( ((Form)sender).Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
// }
//}
//public const int WM_NCLBUTTONDOWN = 0xA1;
//public const int HT_CAPTION = 0x2;
//[DllImportAttribute("user32.dll")]
//public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
//[DllImportAttribute("user32.dll")]
//public static extern bool ReleaseCapture();
评论的部分将创建一个可以移动的无边框形式。