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

C#如何在二值化Bitmap图像的黑点簇中心绘制红点

在二值化Bitmap/PNG图像上绘制红点的解决方案

嘿,我懂你的困扰——之前用Graphics在窗体上画的都是临时效果,没法直接留存到图像文件里对吧?其实核心就是直接在Bitmap对象本身上创建Graphics上下文,而不是绑定到窗体控件。下面给你一步步讲清楚怎么做:

核心思路

你需要基于已有的二值化Bitmap创建专属的Graphics对象,所有绘制操作都会直接修改Bitmap的像素数据,之后就能保存成带红点的图像文件了。

代码示例(C#)

假设你已经通过计算得到了黑点簇的中心坐标(centerX, centerY),并且已经有了二值化后的Bitmap对象:

// 加载你的二值化图像(如果是从文件读取)
Bitmap binaryImage = new Bitmap("path/to/your/binary_image.png");

// 关键:创建基于该Bitmap的Graphics对象
using (Graphics g = Graphics.FromImage(binaryImage))
{
    // 准备红色画刷(用using自动释放资源)
    using (SolidBrush redBrush = new SolidBrush(Color.Red))
    {
        // 定义红点的大小,比如半径5像素的实心圆
        int dotRadius = 5;
        // 绘制红点:FillEllipse的参数是(画刷,左上角X,左上角Y,宽度,高度)
        g.FillEllipse(redBrush, centerX - dotRadius, centerY - dotRadius, dotRadius * 2, dotRadius * 2);
    }
}

// 保存修改后的图像到文件(格式选PNG保持无损)
binaryImage.Save("path/to/save/image_with_red_dot.png", System.Drawing.Imaging.ImageFormat.Png);

// 记得释放Bitmap资源(如果后续不再使用)
binaryImage.Dispose();

关键注意点

  • 不要用窗体的CreateGraphics():那个是绘制到窗体的表面,属于临时绘制,关闭窗体就消失了;而Graphics.FromImage()是直接操作图像的像素数据,修改是永久留存的。
  • 资源释放:用using语句包裹Graphics和Brush,确保它们使用后自动释放内存,避免资源泄漏。
  • 坐标校准:如果你的中心坐标是基于图像的像素坐标,直接用就行;如果是相对窗体的坐标,要注意转换到图像的像素坐标系。

这样操作后,你保存的PNG/Bitmap文件上就会有你想要的红点,完美验证你的中心计算是否准确啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:17:49