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

C#如何实现带边框内图居中嵌入带标题的外层空白Bitmap

实现方案

你原有代码的核心问题有两个:一是源图绘制起点设为(0,0),没有预留顶部标题区域,也没做居中偏移计算;二是用拉伸源图的方式绘制边缘,根本无法实现纯色边框效果,也没法控制内边距。
按照你的尺寸要求(外层850×610,内层800×500,顶部留标题区),具体实现步骤如下:

  • 先计算固定边距:左右、底部边距统一为(850-800)/2=25px,顶部标题区高度为610-500-25=85px,内层图的绘制起点坐标为(25, 85)
  • 初始化外层画布时,优先匹配源图像素格式和分辨率,避免画质损失;绘制前开启Graphics的高质量渲染参数,防止图像、线条发虚
  • 先填充整个外层画布的背景色,再把源图绘制到计算好的居中矩形区域,不要拉伸源图
  • 直接用DrawRectangle方法绘制内层图边框,不要用拉伸源图的方式凑边框,注意1px线条做像素偏移避免模糊

完整实现代码

using System.Drawing;
using System.Drawing.Drawing2D;

public static Bitmap CreateFramedBitmap(Bitmap srcImage)
{
    // 外层画布固定尺寸
    const int outerWidth = 850;
    const int outerHeight = 610;
    // 动态计算边距与绘制位置
    int sidePadding = (outerWidth - srcImage.Width) / 2;
    int titleAreaHeight = outerHeight - srcImage.Height - sidePadding;
    Rectangle imageDrawArea = new Rectangle(sidePadding, titleAreaHeight, srcImage.Width, srcImage.Height);

    // 初始化位图
    Bitmap resultBmp = new Bitmap(outerWidth, outerHeight, srcImage.PixelFormat);
    resultBmp.SetResolution(srcImage.HorizontalResolution, srcImage.VerticalResolution);
    
    using (Graphics g = Graphics.FromImage(resultBmp))
    {
        // 配置高质量绘制参数
        g.SmoothingMode = SmoothingMode.AntiAlias;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        
        // 填充画布背景(可按需修改背景色)
        g.Clear(Color.White);
        // 居中绘制源图
        g.DrawImage(srcImage, imageDrawArea);
        
        // 绘制内层图1px黑色边框(可按需修改颜色、线宽)
        using (Pen borderPen = new Pen(Color.Black, 1f))
        {
            Rectangle borderRect = new Rectangle(
                imageDrawArea.X,
                imageDrawArea.Y,
                imageDrawArea.Width - 1,
                imageDrawArea.Height - 1
            );
            g.DrawRectangle(borderPen, borderRect);
        }

        // 标题直接在顶部0~titleAreaHeight高度范围内绘制即可
    }

    return resultBmp;
}

注意事项

  • 如果后续源图尺寸不固定,只需要保留边距动态计算逻辑即可,无需写死尺寸值
  • Pen、Graphics等非托管资源必须用using包裹释放,否则会出现内存泄漏问题
  • 边框线宽如果大于1px,对应调整边框矩形的缩进值即可,避免线条和图像边缘错位
  • 预期效果参考:
    带标题区的边框内嵌图效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:57:11