如何在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?
答案 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。