如何打印图片

2019-04-15 17:40发布

选中一张图片,把这张图片传到打印预览的窗口里面。这里的关键在于如何使大分辨率的图片完整的打印出来,使图片能够根据打印纸张的大小进行相应的缩放,避免图片溢出而打印不全。首先要获取打印要纸张的宽和高,然后获取要打印图片的分辨率,最后判断是否将图片旋转90度显示,以方便平铺到打印机的纸张上。 打印预览的窗体由VS工具箱里面的控件提供,这个控件是PrintPreviewDialog,它可以向用户显示关联文档打印时的样子。但是显示这个窗体的时候,需要把当前的图片传递进去。这就要用到另一个控件PrintDocument,它可以定义一个向打印机发送输出的对象。PrintDocument里面有一个PrintPage事件,使用如下代码将PrintPage控件和PrintPreviewDialog控件关联起来后,当打开PrintPreviewDialog窗体时,就会触发这个PrintPage事件,并且这个对象会对将要打印的对象做一个处理,使打印预览能够正常显示。ppdPicture.Document = pdOutObject; //ppdPicture是PrintPreviewDialog的实体对象,pdOutObject是PrintDocument的实体对象 ppdPicture.ShowDialog(); //显示打印预览窗体在PrintPage事件里面,需要对打印对象做如下处理,代码:private void pdOutObject_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { string fullName = lbPictureName.SelectedItem.ToString(); //图片的全名 string fullPath = GetPictureFullPath(fullName); //图片的全路径 int printWidth = pdOutObject.DefaultPageSettings.PaperSize.Width; //打印机纸张的宽度 int printHeight = pdOutObject.DefaultPageSettings.PaperSize.Height; //打印机纸张的高度 int picWidth = pbShowPicture.Image.Width; //图片的宽度 int picHeight = pbShowPicture.Image.Height; //图片的高度 //判断图片的宽度是否小于打印纸张的宽度 if (picWidth <= printWidth) //如果图片的宽度小于或等于纸张的宽度,则让图片处于纸张正中间 { float x = (printWidth - picWidth) / 2; //设置图片显示的水平位置 float y = (printHeight - picHeight) / 2; //设置图片显示的垂直位置 //使用DrawImage方法重新绘制图片 e.Graphics.DrawImage(Image.FromFile(fullPath), x, y, picWidth, picHeight); } else { if (picWidth > picHeight) //判断图片的宽度是否大于高度,如果大于,就把图片旋转90度显示 { Bitmap bm = (Bitmap)Bitmap.FromFile(fullPath); //以原图片路径创建一个新的图像 bm.RotateFlip(RotateFlipType.Rotate90FlipXY); //把图片旋转90度 //计算图片高度占纸张宽度的比例 Single ratio = printWidth / picHeight; e.Graphics.DrawImage(bm, 0, 0, picHeight * ratio, picWidth * ratio); } else //如果图片宽度小于等于高度,就把图片按比例缩放显示 { Single ratio = picWidth / printWidth; e.Graphics.DrawImage(Image.FromFile(fullPath), 0, 0, printWidth * ratio, printHeight * ratio); } } }
注意:Bitmap位于System.Drawing命名空间,用于封装GDI+位图,处理由像素数据定义的图像对象。 e.Graphics.DrawImage()方法用于在指定的位置按照指定的大小绘制指定的图像(System.Drawing.Image)。