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

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

本文详细介绍如何使用 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。