You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PictureBox间复制图像?pb1.Image=pb2.Image无效求解决方案

解决PictureBox图像复制问题的几种方法

我来帮你搞定这个问题!直接用pb1.Image = pb2.Image没生效,本质是你只是让两个控件引用了同一个Image对象——WinForms有时候不会自动触发控件重绘,而且后续如果其中一个控件修改/释放了这个Image实例,另一个也会跟着出问题。下面给你几个完全不依赖图片路径的靠谱方案:

  • 克隆独立的Image实例
    用Clone()方法创建一个和pb2图像完全一样的新实例,这样两个PictureBox各自持有独立的图像,互不影响,还能触发控件重绘:

    if (pb2.Image != null)
    {
        // 克隆图像并赋值
        pb1.Image = (Image)pb2.Image.Clone();
        // 强制刷新pb1确保显示
        pb1.Refresh();
    }
    
  • 基于pb2图像创建新Bitmap
    Bitmap是Image的子类,直接用它的构造函数传入pb2的图像,也能生成独立的图像对象,适合大多数场景:

    if (pb2.Image != null)
    {
        pb1.Image = new Bitmap(pb2.Image);
    }
    
  • 手动绘制到pb1(灵活适配尺寸)
    如果需要自定义显示尺寸或者上面的方法都不生效,可以用Graphics直接绘制图像。注意分临时绘制和持久化两种情况:

    if (pb2.Image != null)
    {
        // 方式1:临时绘制(窗口重绘后会消失)
        using (Graphics g = pb1.CreateGraphics())
        {
            g.DrawImage(pb2.Image, 0, 0, pb1.Width, pb1.Height);
        }
    
        // 方式2:持久化绘制(生成Bitmap赋值给pb1)
        Bitmap newBmp = new Bitmap(pb1.Width, pb1.Height);
        using (Graphics g = Graphics.FromImage(newBmp))
        {
            g.DrawImage(pb2.Image, 0, 0, pb1.Width, pb1.Height);
        }
        pb1.Image = newBmp;
    }
    

额外注意事项

  • 记得先判断pb2.Image != null,避免空引用异常;
  • 如果图像占用内存较大,用完不需要的Image对象时记得调用Dispose()释放资源。

内容的提问来源于stack exchange,提问作者Zilly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:09:39