
在处理图片缩放时我们通常依赖于GDI提供的方法有时甚至需要借助特定算法来减轻图片缩放导致的失真。然而PictureBox控件已经为我们妥善处理了这一切其显示的图片清晰度远胜于我们使用GDI自行处理的版本。以下图示展示了这一优势◇ PictureBox显示模式PictureBox.SizeMode 属性提供了几种不同的取值用于调整图片在PictureBox中的显示方式。以下是这些取值的详细说明AutoSize此模式会调整PictureBox的大小使其与所包含的图像尺寸相匹配。CenterImage如果PictureBox的尺寸大于图像则图像会在PictureBox中居中显示。反之如果图像尺寸大于PictureBox则图像仅在PictureBox中心显示边缘部分会被裁剪。Normal在这种模式下图像会被放置在PictureBox的左上角。如果图像尺寸超出PictureBox超出部分将被裁剪。StretchImage此模式会使图片在PictureBox内进行拉伸或压缩以适应其尺寸。Zoom此模式会按照图像原有的比例增加或减小其尺寸。02图片加载方法◇ 简单方法通常我们会使用简单的代码来从文件加载图片例如csharpstring Imgstr openFileDialog1.FileName.ToString();this.pictureBox1.Image Image.FromFile(Imgstr);◇ 复杂方法然而这次我们将尝试使用二进制流来加载并显示图片看看这种方式会带来怎样的不同。首先我们需要打开并读取文件csharpstring Imgstr openFileDialog1.FileName.ToString();FileStream fs new FileStream(Imgstr, FileMode.Open, FileAccess.Read); // 打开并读取文件BinaryReader br new BinaryReader(fs); // 实例化BinaryReader类以进行二进制读取通过这种方式我们可以更灵活地处理图片数据并可能实现一些特殊的图片处理功能。将文件流转换为二进制流后我们可以进一步处理这些数据。首先使用br.ReadBytes((int)fs.Length)将文件流中的数据读取到一个字节数组中。接下来创建一个MemoryStream对象并将这个字节数组作为参数传递给它。最后通过Image.FromStream(ms)将这个内存流转换为图片对象并赋值给pictureBox1.Image。你可能会问为什么选择这种复杂的方法而不是直接使用简单的方法其实这主要是为了学习和探索。在某些情况下例如需要从数据库中读取字节流形式的图片数据时这种方法就派上了用场。虽然在日常开发中我们更倾向于使用简单直接的方法但掌握多种解决方案总是有益的。在这段代码中我们主要利用了BinaryReader类来读取二进制数据并进行了相应的转换和处理。