C# WinForms 实现两张图片叠加合成代码示例

Finn
Finn
发布时间:2026-10-15 | 3人浏览过
原创

本文详细介绍如何使用 C# WinForms 结合 System.Drawing 命名空间实现图片叠加合成功能。主要涉及打开本地图片文件、创建画布以及将前景图绘制到背景图坐标点上,提供可直接运行的完整窗体代码。

效果展示

程序运行后,用户可在界面上分别选择两张图片,点击按钮后将两张图合并显示。实际效果图如下:

实现原理

C# 提供了强大的 System.Drawing 命名空间用于图像处理。核心步骤包括:

  1. 加载图片:使用 Image.FromFile 将磁盘上的图片文件读取到内存对象中。
  2. 创建画布:实例化一个 Bitmap 对象作为底层画布(通常以第一张图片的尺寸或内容为基础)。
  3. 获取绘图上下文:调用 Graphics.FromImage 从目标 Bitmap 中获取 Graphics 对象,该对象负责执行绘制操作。
  4. 执行绘制:使用 DrawImage 方法将第二张图片绘制到画布的特定坐标位置。

准备条件

  • 开发环境:Visual Studio (VS2019/2022)。
  • 项目类型:Windows Forms App (.NET Framework 或 .NET Core/6+)。
  • 控件需求:窗体上需放置以下控件并配置好事件绑定:
    • Button x3:分别为“选择第一张图片”、“选择第二张图片”、“合成图片”。
    • PictureBox x3:分别预览原图1、原图2及合成后的结果。
    • OpenFileDialog x2:用于触发文件选择对话框,设置过滤规则为 *.jpg;*.jpeg;*.png;*.bmp。

第1步:导入必要命名空间

在文件头部确保引入了以下基础库,以便访问图形类和对话框类:

using System;
using System.Windows.Forms;
using System.Drawing;

第2步:实现图片选择与预览逻辑

通过 OpenFileDialog 让用户选择本地文件,并将选中的图片赋值给对应的 PictureBox.Image 属性进行预览。注意处理空值判断,防止未选择图片时发生错误。

第3步:编写图片合成核心代码

在“合成图片”按钮的点击事件中,执行以下操作:

  1. 检查两张源图片是否均已成功加载(不为 null)。
  2. 以第一张图片创建 Bitmap 对象。
  3. 创建绘图用的 Graphics 实例。
  4. 调用 g.DrawImage 将第二张图片绘制到相对偏移量(如左上角 (5, 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#图片处理的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表