You need to enable JavaScript to run this app. Winform C# 裁剪Bitmap后如何适配492*522的PictureBox并保持拉伸效果
优惠活动
大模型
产品
解决方案
定价
更多

Winform C# 裁剪Bitmap后如何适配492*522的PictureBox并保持拉伸效果

解决方案

问题根因

  • 属性不匹配:BackgroundImageLayout = Stretch仅作用于PictureBox.BackgroundImage属性,你当前为Image属性赋值,该拉伸配置不会生效。
  • 裁剪参数错误:你定义的裁剪区域宽度为原图的1/2,高度仍为原图高度,既不符合「仅裁剪顶部200像素」的需求,也会导致输出的裁剪图尺寸比例异常。
  • 枚举值配置错误:SizeMode的正确枚举值为PictureBoxSizeMode.StretchImage,需确认属性已正确赋值。

修正后实现

无需修改原有裁剪方法,只需调整裁剪参数和控件属性对应关系即可:

// 固定PictureBox尺寸,也可直接在设计器中配置
pictureBox1.Size = new Size(492, 522);
// 配置Image属性对应的拉伸规则
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

// 修正裁剪区域:从Y轴200位置开始裁剪,保留原图全部宽度,高度为原图高度减去裁剪的200像素
Rectangle cropSection = new Rectangle(0, 200, sourceImage.Width, sourceImage.Height - 200);
Bitmap croppedImage = CropImage(sourceImage, cropSection);

// 赋值后图片会自动拉伸铺满492*522的控件区域
pictureBox1.Image = croppedImage;

// 原有裁剪方法无需修改
public Bitmap CropImage(Bitmap source, Rectangle section)
{
    var bitmap = new Bitmap(section.Width, section.Height);
    using (var g = Graphics.FromImage(bitmap))
    {
        g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel);
        return bitmap;
    }
}

如果你偏好使用BackgroundImage配置拉伸,可替换赋值逻辑,效果一致:

pictureBox1.BackgroundImage = croppedImage;
pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:24:07