C# 图片叠加

congxiaoguang 2009-04-14 03:43:48
现有一幅图片image1,有另一幅图片image2,image2为纯黑色背景,image2上画有白色和红色的图形,要求将image2叠加到image1上,image2上的黑色在image1上为透明色,白色仍为白色,image2上的红色叠加到image1上为透明的红色,得到image为叠加完成的图片。例如,image2上有一白色的多边形边框,多边形内为红色,叠加完成后,image1上也出现一个白色的多边形边框(大小位置与image2上的相同)多边形内的颜色为原image1的颜色上在画上了一层通明的红色。
要求:给出完整的C#源码。
...全文
2381 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zl19821209 2009-11-02
  • 打赏
  • 举报
回复
好,谢谢
wzuomin 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhoujk 的回复:]
把IMAGE2转换成灰度图 fb(,),其中的黑白色不变,红色成了灰色。
将fB(,) 的值调整为 0~1 之前的浮点数。
将fB(,)做为 Image2 叠加的透明通道,即 fLast (,) = Image1(,) + Image2(,) * fB(,);
[/Quote]

没看懂,详解一下呗。
CqCoder 2009-05-03
  • 打赏
  • 举报
回复
错误 1 当前上下文中不存在名称“resources” C:\Documents and Settings\Administrator\桌面\565465\WindowsApplication1\WindowsApplication1\Form1.cs 49 72 WindowsApplication1


请问下面的resources是什么对象啊????
this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")));
zgke 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 congxiaoguang 的回复:]
矩形只是一个举例,该图形有可能是不规则的,有可能是多个
[/Quote]

使用 Region
congxiaoguang 2009-04-16
  • 打赏
  • 举报
回复
矩形只是一个举例,该图形有可能是不规则的,有可能是多个
zgke 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 congxiaoguang 的回复:]
给出思路,或流程也可
关键是图中某种颜色叠加到其他图中转变为另一种颜色的方法,最好能给出该方法的代码
[/Quote]

不明白你怎么合... Red + green = yellow?这样
congxiaoguang 2009-04-15
  • 打赏
  • 举报
回复
给出思路,或流程也可
关键是图中某种颜色叠加到其他图中转变为另一种颜色的方法,最好能给出该方法的代码
zgke 2009-04-15
  • 打赏
  • 举报
回复
明白了点
你先知道 你红色的区域..并获取到Rectangle
使用
Grapchis.FillRectangle(new SolidBrush(Color.FromArgb(0,255,255,255))
绘制成全透明的图
Grapchis.FillRectangle(new SolidBrush(Color.FromArgb(100, 255, 255, 255))
然后绘制成半透明的图.

然后把这个图形绘制到你要绘制的地方就可以了..

你试下没试过:)
zhoujk 2009-04-15
  • 打赏
  • 举报
回复
把IMAGE2转换成灰度图 fb(,),其中的黑白色不变,红色成了灰色。
将fB(,) 的值调整为 0~1 之前的浮点数。
将fB(,)做为 Image2 叠加的透明通道,即 fLast (,) = Image1(,) + Image2(,) * fB(,);
wjp_auhtm 2009-04-15
  • 打赏
  • 举报
回复
使用 System.Drawing.Drawing2D.Matrix 改变Alpha值。
Matrix是一个矩阵,从0-1成倍的变换。
congxiaoguang 2009-04-15
  • 打赏
  • 举报
回复
遍历每一个像素,有没有更高效的办法
Harvey_He 2009-04-15
  • 打赏
  • 举报
回复
我写了个demo,可以实现了。

private void button1_Click(object sender, EventArgs e)
{
Color c = new Color();
Bitmap box1 = new Bitmap(pictureBox1.Image);
Bitmap box2 = new Bitmap(pictureBox2.Image);
Bitmap box3 = new Bitmap(pictureBox2.Image);


for (int i = 0; i < pictureBox1.Image.Width; i++)
{
for (int j = 0; j < pictureBox1.Image.Height; j++)
{
c = box2.GetPixel(i, j); //去Picture2的颜色。

if (c == Color.FromArgb(255,255,255))
{
c = box1.GetPixel(i, j); //如果是白色就取Picture1的颜色

}
if (c == Color.FromArgb(255, 0, 0))
{
c = Color.FromArgb(20, c); //如果是红色就做半透明处理Alpha = 20;
}

box3.SetPixel(i, j, c);
}
pictureBox1.Refresh();
pictureBox1.Image = box3;
}

}




注意两个PictureBox的属性设置,否则会造成益处:

this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")));
this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(41, 60);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(243, 224);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// pictureBox2
//
this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
this.pictureBox2.Location = new System.Drawing.Point(338, 60);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(243, 224);
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox2.TabIndex = 1;
this.pictureBox2.TabStop = false;


qiaowei361 2009-04-15
  • 打赏
  • 举报
回复
Mark
congxiaoguang 2009-04-15
  • 打赏
  • 举报
回复
写错别字了
通明==》透明
congxiaoguang 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zgke 的回复:]


不明白你怎么合... Red + green = yellow?这样
[/Quote]


比如说 图A中有一红色的矩形,叠加到图B上时为一为红色且通明的矩形(能够看到原图A的东西,但就是蒙上了一层通明的红色)
cja03 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 congxiaoguang 的帖子:]
要求:给出完整的C#源码。
[/Quote]
congxiaoguang 2009-04-14
  • 打赏
  • 举报
回复
就是图片叠加,叠加时将一种颜色转化为另外一种颜色
zgke 2009-04-14
  • 打赏
  • 举报
回复
呵呵 看迷糊了.

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧