C# - 透明度密钥无法正常工作

时间:2016-10-02 23:34:32

标签: c# transparency visual-studio-2015

我目前将背景颜色设置为蓝色。我还将透明度键设置为等于表单的背面颜色。

正如你所看到的,它正在做一些事情,但它没有摆脱所有的蓝色。我怎样才能解决这个问题所以蓝色会消失? enter image description here

2 个答案:

答案 0 :(得分:0)

编辑:您需要禁用消除锯齿并处理不稳定的启动画面,或者在WPF中创建启动画面。如果您的游戏是在Winforms中制作的,那么您仍然可以通过WPF应用程序启动它。

如果我是正确的,这是使用TransparencyKey而不是GDI +的固有问题。尝试使用TransparencyKey执行相同的过程,但使用GDI +在表单的画布上绘制,而不是向下绘制图像。

您可以在表单的绘制事件中绘制图像。您可以随时致电this.Invalidate();

来调用paint事件

作为一些指导,您的paint事件将需要使用Graphics类。您可以使用Graphics g = this.CreateGraphics();

获取要绘制的表单的Graphics类

然后您可以执行g.Draw...();之类的操作。检查文档以获得更多帮助或评论我的答案,我可以指出正确的方向。

答案 1 :(得分:0)

规则是:选择罕见的TranparencyKey颜色,如Color.Fuchsia,然后设置form.BackColor = form.TransparencyKey。只要您的图片不包含a)半透明或b)TransparencyKey颜色

的像素,这种方法就可以了。

这将创建并打开一个简单的表单,其中包含BackgroundImagePaint事件,可将第二张图片绘制到表单上。

enter image description here

正如您所见,透明度工作正常。正如您所看到的,背景图像(图表中)确实有一小部分消除锯齿的像素,让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();

评论的部分将创建一个可以移动的无边框形式。