【问题标题】:Picturebox Bitmap Scaling图片框位图缩放
【发布时间】:2013-01-08 03:45:02
【问题描述】:

我有一个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 点了,所以我的大脑可能只是没有掌握一些简单的概念。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    将 PictureBoxSizeMode 设置为 Zoom。这样可以保持纵横比。

    【讨论】:

    • 正如我所说的我已经尝试了所有的 SizeModes,Zoom 仍然可以让一个小的 Bitmap 像一个大的一样填充整个 Picturebox。
    • 好的,但它不会扭曲图像,对吧?你想保持位图的相对大小吗?那么最小的应该只与最大的缩放相同的量吗?
    • 是的,这听起来很对,我想我不能在每个位图的基础上这样做,我需要考虑所有其他位图?
    • 是的,听起来像。我会遍历所有位图一次并找到需要最小比例因子的那个,然后无论查看哪个位图都使用该比例因子。
    • 是的,这听起来像是现在我想起来的方式。随意编辑您的答案,无论哪种方式,我都会将其标记为已接受。感谢您的帮助。
    猜你喜欢
    • 2013-07-14
    • 2012-09-20
    • 2013-10-21
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多