基于.NET的Windows窗体编程之WinForms图像控件
SizeMode图像的大小和位置的处理模式它共有四个值默认为NormalNormal 表示图像放置在控件的左上角;如果图像大于控件则其下边缘和右边缘被剪裁。CenterImage 表示图像在控件中居中如果图像大于控件则图像的外部边缘会被裁剪。AutoSize 控件的大小调整为图像的大小。StretchImage 表示将图像的大小调整为控件的大小。首先拖动控件PictureBox到Form表单中并命名为pbImage在Visual Studio设计器中PictureBox控件为虚线边框的正方形控件可以在设计时通过Image属性设置控件显示的图片所见即所得如下所示运行示例效果如下所示在上述示例中PictureBox控件的SiteMode为Normal图像大小小于PictureBox控件的大小没有填满控件剩余部分显示控件的背景色Yellow。PictureBox控件不仅可以在设计器中添加图片还可以通过C#代码加载控件在Form的Load事件中为PictureBox控件赋值如下所示private void FrmImage_Load(object sender, EventArgs e){string imageFile Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Constellation, 02.jpg);//方法一为Image属性赋值Image对象实例//this.pbImage.Image Image.FromFile(imageFile);//方法二为ImageLocation属性赋值图片路径并调用Load方法this.pbImage.ImageLocation imageFile;this.pbImage.Load();}运行示例效果如下所示订阅FormClosed事件并在事件中释放图像资源主要释放图像使用的内存然后清除图形。 如果内存管理出现问题垃圾回收稍后将释放内存。代码如下所示private void FrmImage_FormClosed(object sender, FormClosedEventArgs e){if (pbImage.Image ! null){pbImage.Image.Dispose();pbImage.Image null;}}当Form表单关闭时会触发FormClosed事件执行图像的释放。ImageListImageList 组件用于存储图像然后可由控件显示图像列表允许为单个一致的图像目录编写代码。组件的关键属性主要有以下几个Images表示包含关联控件要使用的图片。 每个图像都可以通过其索引值或键访问。ColorDepth 属性确定图像呈现的颜色数。ImageSize 属性设置图像将以相同的大小显示更大的图像将被缩放以适应。首先拖动ImageList控件到Form表单中并命名为imgListImageList控件并不会直接显示在页面中而是显示在组件托盘中一般与其他控件一起使用如ListView。首先在Form的Load事件中为ImageList控件添加图像并将PictureBox控件的图像设置为ImageList的第一张图像。如下所示private void FrmImage_Load(object sender, EventArgs e){var images Directory.GetFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Constellation));images images.OrderBy(item item).ToArray();//排序foreach (var image in images){this.imgList.Images.Add(Image.FromFile(image));}this.imgList.ImageSize new Size(200, 200);this.pbImage.Image this.imgList.Images[0];this.pbImage.SizeMode PictureBoxSizeMode.CenterImage;this.imageIndex 0;}然后添加两个按钮分别用于切换前一张下一张图片如下所示private int imageIndex 0;private void btnPrev_Click(object sender, EventArgs e){if (imageIndex 0){return;}imageIndex--;this.pbImage.Image this.imgList.Images[imageIndex];}private void btnNext_Click(object sender, EventArgs e){if (imageIndex this.imgList.Images.Count - 1){return;}imageIndex;this.pbImage.Image this.imgList.Images[imageIndex];}上述示例提前判断当前图片的索引是否是第一张和最后一张主要是为了防止数组越界。运行示例效果图像所示由于Images本身是图像列表类型可以通过Images的Clear方法Remove方法删除图片。如下所示// 删除指定图片.imgList.Images.Remove(myImage);//清空所有图片.imgList.Images.Clear();还可以通过Key进行添加和删除图片如下所示//按Key添加图片System.Drawing.Image myImage Image.FromFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) \Image.gif);imgList.Images.Add(myPhoto, myImage);//按key删除图片.imgList.Images.RemoveByKey(myPhoto);