C# PictureBox在';城市景观

C# PictureBox在';城市景观,c#,winforms,picturebox,C#,Winforms,Picturebox,所以我使用这个MDI表单应用程序,使用图片框显示从openFileDialog中选择的图片。然而,今天有一位用户抱怨说,如果图片是横向的(我用1920x1200进行了测试),它实际上会切到图片的右端。当然,图片框的宽度要小得多(440px),但即使对于我用于测试的图像,它也只剪切了一点点。然而,这是不可接受的,所以我想使整个图像适合picturebox框架,无论它有多大 以下是我显示图片的代码: OpenFileDialog openFileDialog1 = new OpenFileDial

所以我使用这个MDI表单应用程序,使用图片框显示从openFileDialog中选择的图片。然而,今天有一位用户抱怨说,如果图片是横向的(我用1920x1200进行了测试),它实际上会切到图片的右端。当然,图片框的宽度要小得多(440px),但即使对于我用于测试的图像,它也只剪切了一点点。然而,这是不可接受的,所以我想使整个图像适合picturebox框架,无论它有多大

以下是我显示图片的代码:

 OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.Filter = "All files (*.jpg)|" + prefixFilter + "*.jpg";
            openFileDialog1.FileName = prefixFilter; 
            openFileDialog1.Title = "Select file";
            openFileDialog1.InitialDirectory = DefaultOpenPath;
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    IsImageOpened = true;
                    selectedFile = openFileDialog1.FileName;
                    selectedFileName = openFileDialog1.SafeFileName;

                    using (var temp = new Bitmap(openFileDialog1.FileName))
                    {
                        pictureBox1.Image = new Bitmap(temp);
                    }

                    int imageWidth = pictureBox1.Image.Width;
                    int picBoxWidth = pictureBox1.Width;

                    if (imageWidth != 0 && picBoxWidth > imageWidth)
                    {
                        pictureBox1.Width = imageWidth;
                    }
                    else
                    {
                        pictureBox1.Width = defaultPicBoxWidth;
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex.ToString());
                    IsImageOpened = false;
                    MessageBox.Show("Error loading image!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
在这里,我使用图像宽度,但出于不同的目的,我不知道是否可以使用此代码,或者是否有一些标准方法来处理此问题

我的picturebox还有
SizeMode-Zoom

附言

这是原始图片:

这就是picturebox在右侧切割的方式(从原始图像中寻找灌木丛-它们不见了)


您只需将
PictureBoxSizeMode的
PictureBoxSizeMode
设置为:

pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

查看更多详细信息。

这很难说,但从图片上看,PictureBox似乎只是简单地设置为
正常的默认
大小模式:

法线-图像放置在图像的左上角 图片盒。如果图像大于PictureBox,则会对其进行剪裁 它包含在


再次检查,确保SizeMode设置为
缩放
,并且您没有通过代码更改此属性。

它没有保持纵横比,而且(我还是尝试了)图像的某些部分再次被切断。创建一个新项目,添加一个picturebox,然后重现问题。然后在这里显示代码。如果您不能在新项目中复制它,那么问题显然是代码/ui设计中的其他地方(图片框的右侧可能有一些内容)。这不应该发生,它应该可以与您正在使用的SizeMode Zoom一起工作。同意…这不应该与“Zoom”设置一起出现。你能发布一些完整图像的截图以及它是如何被截取的吗?现在你可以在编辑后的文章中看到真正发生了什么。缩放应该可以工作了。在保持大小比例的情况下,图像的大小会增加或减少。简单的解释是,PictureBox比表单大。别忘了打开它的右锚和下锚。