C# WinForms 实现两张图片叠加合成代码示例
本文详细介绍如何使用 C# WinForms 结合 System.Drawing 命名空间实现图片叠加合成功能。主要涉及打开本地图片文件、创建画布以及将前景图绘制到背景图坐标点上,提供可直接运行的完整窗体代码。
效果展示
程序运行后,用户可在界面上分别选择两张图片,点击按钮后将两张图合并显示。实际效果图如下:
实现原理
C# 提供了强大的 System.Drawing 命名空间用于图像处理。核心步骤包括:
- 加载图片:使用
Image.FromFile将磁盘上的图片文件读取到内存对象中。 - 创建画布:实例化一个
Bitmap对象作为底层画布(通常以第一张图片的尺寸或内容为基础)。 - 获取绘图上下文:调用
Graphics.FromImage从目标Bitmap中获取Graphics对象,该对象负责执行绘制操作。 - 执行绘制:使用
DrawImage方法将第二张图片绘制到画布的特定坐标位置。
准备条件
- 开发环境:Visual Studio (VS2019/2022)。
- 项目类型:Windows Forms App (.NET Framework 或 .NET Core/6+)。
- 控件需求:窗体上需放置以下控件并配置好事件绑定:
Buttonx3:分别为“选择第一张图片”、“选择第二张图片”、“合成图片”。PictureBoxx3:分别预览原图1、原图2及合成后的结果。OpenFileDialogx2:用于触发文件选择对话框,设置过滤规则为*.jpg;*.jpeg;*.png;*.bmp。
第1步:导入必要命名空间
在文件头部确保引入了以下基础库,以便访问图形类和对话框类:
using System;
using System.Windows.Forms;
using System.Drawing;
第2步:实现图片选择与预览逻辑
通过 OpenFileDialog 让用户选择本地文件,并将选中的图片赋值给对应的 PictureBox.Image 属性进行预览。注意处理空值判断,防止未选择图片时发生错误。
第3步:编写图片合成核心代码
在“合成图片”按钮的点击事件中,执行以下操作:
- 检查两张源图片是否均已成功加载(不为
null)。 - 以第一张图片创建
Bitmap对象。 - 创建绘图用的
Graphics实例。 - 调用
g.DrawImage将第二张图片绘制到相对偏移量(如左上角(5, 5))处。 - 将生成的
Bitmap赋给第三张PictureBox显示结果。
完整代码实现
以下是主逻辑窗体代码,包含了初始化、图片选择和合成按钮的处理逻辑:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// 选择第一张图片
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
}
}
// 选择第二张图片
private void button2_Click(object sender, EventArgs e)
{
if (openFileDialog2.ShowDialog() == DialogResult.OK)
{
pictureBox2.Image = Image.FromFile(openFileDialog2.FileName);
}
}
// 执行图片合成
private void button3_Click(object sender, EventArgs e)
{
// 确保两张图片都已加载
if (pictureBox1.Image != null && pictureBox2.Image != null)
{
// 以第一张图为底图创建位图
Bitmap bt = new Bitmap(pictureBox1.Image);
// 创建 Graphics 对象用于绘图
using (Graphics g = Graphics.FromImage(bt))
{
// 将第二张图绘制到底图上,起点坐标为 (5, 5)
g.DrawImage(pictureBox2.Image, new Point(5, 5));
}
// 显示合成结果
pictureBox3.Image = bt;
}
}
}
设计器代码说明
为确保功能正常,窗体设计器生成的代码需正确关联上述按钮事件。关键参数如下:
- 文件过滤器:
Filter属性设为"图片文件|*.jpg;*.jpeg;*.png;*.bmp",限制只能选择常见图片格式。 - 布局安排:通常左侧或上方放置预览区,右侧放置合成结果区。建议使用
SuspendLayout()和ResumeLayout()优化初始化性能。 - 资源释放:最佳实践中,应在不再需要时调用
Dispose()释放非托管的Image和Graphics对象,上面的示例使用了using语句块自动处理Graphics资源。
以上就是C# WinForms实现图片合成功能的详细内容,更多关于C#图片处理的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













