为什么调整 image/s 大小时结果不是我输入的大小?

Why when resizing image/s the result is not the size I input?

本例中的文件类型为jpg

private void beginOperationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (files.Length > 0)
            {
                backgroundWorker1.RunWorkerAsync();
            }
        }

        private static Bitmap ResizeImage(String filename, int maxWidth, int maxHeight)
        {
            using (Image originalImage = Image.FromFile(filename))
            {
                //Caluate new Size
                int newWidth = originalImage.Width;
                int newHeight = originalImage.Height;
                double aspectRatio = (double)originalImage.Width / (double)originalImage.Height;
                if (aspectRatio <= 1 && originalImage.Width > maxWidth)
                {
                    newWidth = maxWidth;
                    newHeight = (int)Math.Round(newWidth / aspectRatio);
                }
                else if (aspectRatio > 1 && originalImage.Height > maxHeight)
                {
                    newHeight = maxHeight;
                    newWidth = (int)Math.Round(newHeight * aspectRatio);
                }
                if (newWidth >= 0 && newHeight >= 0)
                {
                    Bitmap newImage = new Bitmap(newWidth, newHeight);
                    using (Graphics g = Graphics.FromImage(newImage))
                    {
                        //--Quality Settings Adjust to fit your application
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                        g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
                        return newImage;
                    }
                }
                return null;
            }
        }

然后

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                BackgroundWorker worker = sender as BackgroundWorker;
                int counter = 0;
                int percentage = 0;
                foreach (string file in files)
                {                   
                    Bitmap bmp1 = new Bitmap(ResizeImage(file, 512, 512));
                    string resizedfilename = Path.Combine(directoryPath, Path.GetFileNameWithoutExtension(file) + "_resized.jpg");
                    bmp1.Save(resizedfilename);
                    bmp1.Dispose();
                    counter++;
                    percentage = counter * 100 / files.Length;
                    worker.ReportProgress(percentage);
                }
            }
            catch(Exception err)
            {
                
            }
        }

硬盘上原图jpg大小为宽536高589

硬盘上的resize图片为Width 512 Height 536

为什么调整后的图片高度是536?

以及为什么调整后的图像在硬盘上的大小为 600 KB,而原始图像大小仅为 130 KB?

我认为你的纵横比小于和大于是反的。如果图像是 'landscape'(宽度 > 高度),那么宽高比将为正(因为你正在做 width / height)。如果是 'portrait',则为负数。但是你有它们的反面。