C#简单图像调整大小:文件大小不缩小

con*_*att 3 c# resize image image-resizing

我对以下代码有疑问.我下面的代码成功运行了一个目录,并将图片的resoultion设置为更小的尺寸.但是,文件大小不会更改.例如,尺寸为2400x1800且文件大小为1.5MB的图像将缩放为800x600,但800x600图片仍为1.5MB文件大小.我想我可能要明确压缩图片,但我不确定.有任何想法吗?

private void Form1_Load(object sender, EventArgs e)
        {
            string[] files = null;
            int count = 0;
            files = System.IO.Directory.GetFiles(@"C:\Users\..\..\ChristmasPicsResized");
            foreach (string file in files)
            {
                System.Drawing.Bitmap bmp = System.Drawing.Bipmap.FromFile(file);

                ResizeBitmap(bmp, 807, 605).Save(
                     @"C:\users\..\..\TempPicHold\Pic" + count.ToString() + ".jpg");
                count++;
            }
        }
        public Bitmap ResizeBitmap(Bitmap b, int nWidth, int nHeight)
        {
            Bitmap result = new Bitmap(nWidth, nHeight);
            using (Graphics g = Graphics.FromImage((Image)result))
                g.DrawImage(b, 0, 0, nWidth, nHeight);
            return result;
        }
Run Code Online (Sandbox Code Playgroud)

con*_*att 8

发现了问题.感谢@yetapb显示更清晰的代码版本,但仍然无效.问题的答案是我需要明确指定将图像保存为的文件类型.我的猜测是,因为我没有明确指定图像格式,所以没有相应地处理图像压缩.一个Bitmap刚刚以较小的分辨率保存,并在其上打了一个".jpg",并且没有相应地进行压缩.以下代码现在有效.

            files = System.IO.Directory.GetFiles(@"C:\PicFolder");
            for (string file in files)
            {
            Bitmap tempBmp = new Bitmap(file);
            Bitmap bmp = new Bitmap(tempBmp, 807, 605);

            bmp.Save(
            @"C:\NewPicFolder\Pic" + count + ".jpg",
            System.Drawing.Imaging.ImageFormat.Jpeg);
            count++;
            }
Run Code Online (Sandbox Code Playgroud)

  • 另外,请查看您需要避免的[图像调整大小陷阱](http://nathanaeljones.com/163/20-image-resizing-pitfalls/).现在,您正在泄漏GDI句柄,内存并生成低质量图像. (2认同)