在.NET中压缩图像

3

如何在C#中压缩图像文件(*bmp,*jpeg), 我需要将一些图像作为背景显示在我的控件上,我正在使用以下代码来缩放我的图像

Bitmap orgBitmap = new Bitmap(_filePath);
Bitmap regBitmap = new Bitmap(reqSize.Width, reqSize.Height);

 using (Graphics gr = Graphics.FromImage(reqBitmap))
 {
  gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  gr.DrawImage(bmp, new RectangleF(0, 0, reqSize.Width, reqSize.Height));
  }

它给我所需的位图。 我的问题是,如果原始位图太大(2 MB),那么当我加载50个图像时,它会占用所有的内存,我想尽可能压缩图像而不失去太多质量,我该如何在.NET中实现相同的功能?

4个回答

3
你是否一定需要在执行时显示大图像?你可以使用图像编辑程序(例如Photoshop、Paintshop Pro等)事先调整大小或以稍低的质量保存它们吗?每次运行都进行这样的操作似乎没有什么意义,特别是因为编辑工具可能会更好地完成工作。
当然,如果用户从硬盘中随意选择图像,则此方法无效。
另一个问题:当你完成对位图的操作后,你是否将其释放?你的代码中没有显示出这一点... 如果你没有处理原始(大)位图,则将受到终结器的控制来释放非托管资源。终结器也会延迟垃圾回收这些对象。

谢谢您的回答, 用户可以从硬盘中选择任何图像。是的,我在使用后处理原始图像,我在我的代码中错过了那段代码。 - Firoz

2

1
也许我误解了一些事情,但为什么不在将位图导入项目作为控件背景之前将它们转换为jpg格式呢?

0

祝你压缩JPEG好运。 :) 它已经被压缩了。至于你的BMP文件,请将它们转换为JPEG格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接