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

C#中DrawImage导致图片体积大幅增大的问题求助

解决JPG图片保存后体积暴增的问题

你的核心问题是直接调用Bitmap.Save()保存JPG时,.NET默认使用极低压缩率(甚至无压缩),导致原本经过压缩的JPG被转为高体积的未压缩/低压缩格式。结合你的代码,给出以下修复方案:

问题代码的核心问题

  1. 保存JPG时未指定压缩参数,默认生成的文件几乎无压缩
  2. 代码中存在笔误:ret的高度用了map1.Height,应改为h避免尺寸错误

修正后的代码

var map = new Bitmap("a.jpg");
var w = map.Width;
var h = map.Height;
var _bitmap = new Bitmap(w, h, PixelFormat.Format24bppRgb);
Graphics _g = Graphics.FromImage(_bitmap);
// 修正笔误,将map1.Height改为h
var ret = new Rectangle(0, 0, w, h);
_g.DrawImage(map, ret);

// 配置JPG压缩参数
var jpgEncoder = ImageCodecInfo.GetImageEncoders().First(codec => codec.FormatID == ImageFormat.Jpeg.Guid);
var encoderParams = new EncoderParameters(1);
// 质量取值0-100:数值越小压缩率越高、体积越小,画质损失越大;80左右兼顾体积与画质
encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 80L);

_bitmap.Save("a.jpg", jpgEncoder, encoderParams);
// 释放资源,避免内存泄漏
_g.Dispose();
_bitmap.Dispose();
map.Dispose();

体积暴增的原因

原始JPG是经过有损压缩的格式,而你创建的Format24bppRgb位图是未压缩的像素数据。直接调用无参数的Save()方法时,.NET会以默认的最低压缩率保存,相当于把未压缩的位图数据直接转存为JPG,自然体积暴增。

额外建议

  • 处理图片后必须手动释放Bitmap、Graphics等资源,防止内存泄漏
  • 拼接图片时确认最终尺寸与预期一致,避免生成多余像素数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:54:19