c# 图片透明化

我用c#建立了2个picturebox控件,叠加在一起,给每一个picturebox放上图片。现在要求上面那个picturebox显示的图片要半透明化。最后能同事看到2副... 我用 c# 建立了 2个 picturebox 控件 ,叠加在一起,给每一个picturebox 放上图片。 现在要求 上面那个picturebox显示的图片要半透明化。最后能同事看到2副图的叠加。 光从控件的属性上去调整好想不行。
另外 图片都是png的。纯调整图片透明度好像不能穿透 控件的背景
就是 底下黑色的picturebox 我放一张照片,然后 上面的白色的 picturebox 我要放入透明的 栅格条,使得最后 能直接看到有栅格条的 照片。照片任意换,但栅格条一直在那边。
展开
 我来答
百度网友cfe4d0f
推荐于2017-10-10 · TA获得超过1502个赞
知道小有建树答主
回答量:937
采纳率:100%
帮助的人:866万
展开全部

不建议使用PictureBox  对于winform的机制无法这么简单的实现透明

默说最容易的实现方法还是GDI自绘

一个可以测试的代码如下  我定义了一个自定义控件来完成这个工作

其实关键代码不是很多-w-

void Main()
{
Form f = new Form();
f.Size = new Size(600,500);

Button btn1 = new Button();
btn1.Text = "打开图片1";
btn1.Location = new Point(0,0);
f.Controls.Add(btn1);

Button btn2 = new Button();
btn2.Text = "打开图片2";
btn2.Location = new Point(0,30);
f.Controls.Add(btn2);

TrackBar bar1 = new TrackBar();
bar1.Location = new Point(0,60);
bar1.Maximum = 100;
bar1.Value = 100;
f.Controls.Add(bar1);

MyPicBox picBox = new MyPicBox();
picBox.Location = new Point(100,0);
picBox.Size = new Size(600,600);
picBox.Image2Location = new Point(100,100);
f.Controls.Add(picBox);

btn1.Click += (o,e) => {
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK) {
picBox.Image1 = Image.FromFile(dlg.FileName);
picBox.Invalidate();
}
};

btn2.Click += (o,e) => {
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK){
picBox.Image2 = Image.FromFile(dlg.FileName);
picBox.Invalidate();
}
};

bar1.ValueChanged += (o,e) => {
picBox.Image2Opacity = bar1.Value * 0.01f;
picBox.Invalidate();
};

Application.Run(f);
}

// Define other methods and classes here
public class MyPicBox : UserControl {
public MyPicBox() {
this.Image2Opacity = 1f;
base.DoubleBuffered = true;
}

public Image Image1 {get;set;}
public Image Image2 {get;set;}
public Point Image2Location {get;set;}
public float Image2Opacity {get;set;}

protected override void OnPaint(PaintEventArgs e) {
if (Image1 != null)
e.Graphics.DrawImage(Image1, 
new Rectangle(Point.Empty, Image1.Size),
new Rectangle(Point.Empty, Image1.Size),
GraphicsUnit.Pixel);
if (Image2 != null) {
ImageAttributes attr = new ImageAttributes();
attr.SetColorMatrix(new ColorMatrix(){ Matrix33 = Image2Opacity }); 
e.Graphics.DrawImage(Image2,
new Rectangle(Image2Location.X, Image2Location.Y, Image2.Width, Image2.Height),
0,0, Image2.Width, Image2.Height,
GraphicsUnit.Pixel,
attr);
}
}
}


效果图

博思aippt
2024-07-20 广告
博思AIPPT是基于ai制作PPT的智能在线工具,它提供了4种AI制作PPT的方式,包括AI生成大纲、AI直接生成PPT、文本生成PPT、AI提炼文档生成PPT,一站式集成多种AI生成PPT的方式,可满足办公用户的不同需求和使用场景。ai生... 点击进入详情页
本回答由博思aippt提供
184779891
2014-07-03 · TA获得超过109个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:84.2万
展开全部
控件有个属性
Opacity=0是完全隐藏
Opacity=1是完全显示
你可以根据自己需要设置成0.5 0.3这样的浮点数就行
追问
你好 picturebox 这个控件该如何调opacity这个属性呢?
好想没有picturebox.Opacity=0.5;这样的方法。

能不能详细说下啊 万分感谢
追答
啊~ 不好生意。picturebox没有。但是窗体(form)有这个属性。你可以将一个窗体单独作为一个picturebox的唯一载体。然后picture form的样式设置为none。这样看着就像是一个picture 让picture form在顶或作为主form的mdiform。然后调节picture form透明度 就实现你想要的效果了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜北权3225
2014-07-03 · 超过65用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:124万
展开全部
那你将Form中的TranspraencyKey设置为你要变透明的颜色 比如你提到的 蓝色

但这有个缺点 就是颜色一定要纯... 不然得话... 你可以试试
希望能解决您的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fej121121
2014-07-05 · TA获得超过651个赞
知道小有建树答主
回答量:655
采纳率:66%
帮助的人:536万
展开全部
1、控件.backgroundcolor透明
2、上层控件.parent=下层控件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式