问题 在透明形式上与picturebox有问题

Luffydev.

新成员
加入
11月4日,2020年
消息
3
编程经验
Beginner
i'我带着你带来我'在C#中通过透明形式进行PNG透明度的问题。我不'知道这个问题是如何调用的,但我've take you a screen : //i.ibb.co/xj37y7M/Capture.png.

对于我的主要,我刚刚用与自己的背景相同的颜色应用了透明度。

对于我的照片,它没有任何背景。

感谢您的帮助!
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
欢迎来到论坛。

请在这里附上你的图像。看起来你的png有alpha组成。它并不希望成为C#/表单的问题。
 

Luffydev.

新成员
加入
11月4日,2020年
消息
3
编程经验
Beginner
我在这里附上了我的形象,谢谢你的答案
 

附件

  • corner_bottom_left.png
    corner_bottom_left.png
    8.4 KB · Views: 11

Luffydev.

新成员
加入
11月4日,2020年
消息
3
编程经验
Beginner
感谢您的快速回复,这是我的设计师代码

C#:
namespace wlp_launcher
{
    partial class Main
    {
        /// <summary>
        /// Variable nécessaire au concepteur.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Nettoyage des ressources utilisées.
        /// </summary>
        /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Code généré par le Concepteur Windows Form

        /// <summary>
        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
        /// le contenu de cette méthode avec l'éditeur de code.
        /// </summary>
        private void InitializeComponent()
        {
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
            this.SuspendLayout();
            //
            // pictureBox1
            //
            this.pictureBox1.BackgroundImage = global::wlp_launcher.Properties.Resources.corner_bottom_left;
            this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
            this.pictureBox1.Location = new System.Drawing.Point(451, 227);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(121, 128);
            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.TabStop = false;
            this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
            //
            // Main
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.Color.Silver;
            this.ClientSize = new System.Drawing.Size(1126, 614);
            this.Controls.Add(this.pictureBox1);
            this.DoubleBuffered = true;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.ImeMode = System.Windows.Forms.ImeMode.NoControl;
            this.Name = "Main";
            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "Form1";
            this.TransparencyKey = System.Drawing.Color.Silver;
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.PictureBox pictureBox1;
    }
}
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
在深色的颜色=> 截屏
在明亮的颜色=> 截屏
这是你想要得到的吗?在明亮和黑暗的背景上使它顺利?

图像设计的性质使得在使用透明度时更难创建平衡。这是由于图像的设计。看到我突出显示的部分的这个例子"shadowing" : 截屏
您的图像在更亮和更暗的阴影之间的不同单元格。这使您的图像看起来有些"pixelated"当您在透明图像中混合具有较深单元的白细胞。您的问题的主要部分是Winforms不允许主表单是透明的。 WPF确实如此,你会更适合在WPF中尝试这个,只有发现它更容易做到。 Winforms设计功能的性质也在阻碍您。

One thing to do is add a panel to your form. Because you can dock the panel to your form then set that forms color to match your transparent key. You can't set your form to a transparent scheme. Placing a panel can help gets around this by then placing the picture box on the panel. this.TransparencyKey = System.Drawing.Color.Silver; is not a great color to use as a transparent key, and that's why you are picking up that gray around your image.

编辑:我想我有权利。您的透明密钥需要与您的表单颜色相同?如果我错了,有人会纠正我。
 
Last edited:

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我只注意到你的图像在我下载它后嵌入了周围的阴影。您无法通过在浏览器中预览它来注意到它。我在用烟花打开图像并缩小到600%时才看到这一点。如果您的图像没有阴影,则不会有一个问题。您正在使用的图像的较大部分是您使用的图像,另一部分是您在设计器代码中使用的颜色。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
更正......您的透明密钥需要透明。

但是,你有你的表单的背景颜色的问题。

您可以将停靠的面板放在表单上以帮助它。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我所做的就是将透明的键颜色更改为黑色,也将表单背景颜色更改为黑色。

当图像覆盖较暗的窗口时,这使得它更好。但坐在白色窗户顶部时,这很糟糕。

即使使用包含阴影的图像,也有一种方法和方法,使其看起来正常。我知道这是因为几年前为某人完成了它。我不能因为我的生活而记得我是如何完成的。但我知道我确实使用一个小组帮助透明度。也许其他人可以刷新我的记忆如何做到这一点?

使用更稳定的图像,您真的会更好,或者移动到WPF,其中,此功能并不自然地限制在WinForms中。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
My suggestion is to not use the picture box. Instead use the transparency key to make the entire form transparent, and then in the Paint event handler of the form, use DrawImage() to paint the PNG in the correct location. I'm not sure if this will work or not, though. I'm too brain fried right now to recall the sequence of events when a form is being rendered with the transparency key color set.
 
最佳 底部