Picturebox位图缩放

本文关键字:缩放 位图 Picturebox | 更新日期: 2023-09-27 17:51:00

我有一个Picturebox和大量的Bitmaps可以在其中显示。与其他位图相比,位图的相对大小对用户来说很重要。他们需要能够看到一个图像比另一个图像更小或更大。位图还必须完全适合图片框,并且不能调整图片框的大小。

当简单地在一个巨大的图片框中显示未缩放的位图时,位图的相对大小很容易看到,但是当试图将它们放入一个小框中并且必须缩小它们时,我的问题就开始了。

当使用Stretch PictureBoxSizeMode时,你会想象图像有时会因为位图的非特定大小而出现扭曲,并且它们随后被拉伸以填充整个框,但Stretch sizemod是最接近我需要的那种。

其他大小模式都不适合我的需要,所以我知道现在我需要创建一个函数来调整位图的大小,这是我尝试的开始,直到我意识到我在完全错误的方向,这里返回的图像保留没有'比例'。

    private Bitmap ResizeBitmap(Bitmap img)
    {
        int newWidth = 0;
        int newHeight = 0;
        double imgRatio;
        if (img.Width > img.Height)
        {
            imgRatio = ((double)img.Height / (double)img.Width) * 100;
            newWidth = pictureBox.Width;
            newHeight = (int)(((double)newWidth / 100) * imgRatio);
        }
        else
        {
            imgRatio = ((double)img.Width / (double)img.Height) * 100;
            newHeight = pictureBox.Height;
            newWidth = (int)(((double)newHeight / 100) * imgRatio);
        }
        Bitmap newImg = new Bitmap(newWidth, newHeight);
        using (Graphics g = Graphics.FromImage(newImg))
            g.DrawImage(img, 0, 0, newWidth, newHeight);
        return newImg;
    }

我一直盯着屏幕一段时间了,现在数学做缩放目前逃避我,我希望有人能指出我在正确的方向。现在都快凌晨4点了,可能是我的大脑还没有掌握一些简单的概念。

Picturebox位图缩放

设置PictureBoxSizeMode为Zoom。这保持了宽高比。