在.NET中压缩图像

时间:2009-09-04 05:51:40

标签: c# .net image-processing gdi+ bitmap

如何在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 个答案:

答案 0 :(得分:3)

你肯定需要在执行时出现大图像吗?您可以事先使用图像编辑程序(Photoshop,Paintshop Pro等)调整它们的大小(或以稍低的质量保存它们)吗?每次运行时似乎都没有什么意义 - 尤其是编辑工具可能会做得更好。

当然,如果用户从硬盘中挑选任意图像,这将无效。

另一点:当你完成它们时,你处理的是位图吗?您没有在代码中显示...如果您没有处理原始(大)位图,那么您将受到终结器的支配以释放非托管资源。终结器还将延迟这些对象的垃圾收集。

答案 1 :(得分:2)

JPEG总会丢失一些东西,PNG则不会。

这是使用C#编码和解码PNG的方式:
http://msdn.microsoft.com/en-us/library/aa970062.aspx

答案 2 :(得分:1)

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

答案 3 :(得分:0)

压缩JPEG好运。 :)它已经被压缩了。至于你的BMP,请将它们设为JPEG。