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

从BMP图像指定位置复制200×200区域时rectBmp始终黑屏的问题求助

问题原因及修复方案

问题根源

你的DrawImage方法参数用错了。当前代码里的第二个参数是目标矩形,你指定的new Rectangle(x-100, y-100, rectWidth, rectHeight)是要把原图内容画到rectBmp的这个位置,但rectBmp本身只有200×200的尺寸,这个目标矩形的起始坐标大概率超出了rectBmp的范围,导致没有任何内容被绘制上去,所以rectBmp一直是初始的黑色背景。

修复后的代码

你需要用DrawImage的重载,明确指定原图中要截取的源矩形和要画到rectBmp的目标矩形(这里是整个rectBmp区域):

Bitmap originalBmp = new Bitmap("C:\\Users\\park\\Downloads\\imsi\\textImage.bmp");

int x = (int)P.X;
int y = (int)P.Y;

int rectWidth = 200;
int rectHeight = 200;

Bitmap rectBmp = new Bitmap(rectWidth, rectHeight);

Graphics g = Graphics.FromImage(rectBmp);
// 修正:第二个参数是目标矩形(填满整个rectBmp),第三个是源矩形(原图要复制的区域)
g.DrawImage(originalBmp, new Rectangle(0, 0, rectWidth, rectHeight), 
            new Rectangle(x - 100, y - 100, rectWidth, rectHeight), 
            GraphicsUnit.Pixel);

pictureBox1.Image = originalBmp;
rectBmp.Save("C:\\Users\\park\\Downloads\\imsi\\result.bmp", ImageFormat.Bmp);

// 释放资源,避免内存泄漏
g.Dispose();
rectBmp.Dispose();
originalBmp.Dispose();

补充说明

  • 目标矩形用new Rectangle(0,0,rectWidth,rectHeight)表示把截取的内容铺满整个rectBmp。
  • 源矩形new Rectangle(x-100, y-100, rectWidth, rectHeight)的逻辑是对的,是以x、y为中心截取200×200的区域。
  • 一定要手动释放Graphics和Bitmap资源,防止内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:32:51