C#中的图像Image类与打印Printing类用法

2022-05-16 10:05:40

一、Images

1、概述

Image>

初始化Image:

Image img0 = Image.FromFile(@"C:1.jpg");
Image img1 = Image.FromStream(File.OpenRead(@"C:1.jpg"));
Image img2 = new Bitmap(@"C:1.jpg");

2、属性

    PixelFormat:获取此>RawFormat:获取此 Image 的文件格式。Size:获取此图像的宽度和高度(以像素为单位)。Width:获取此 Image 的宽度(以像素为单位)。Height:获取此 Image 的高度(以像素为单位)。

    3、方法

      FromFile(String):从指定的文件创建>FromStream(Stream):从指定的数据流创建 Image。GetBounds(GraphicsUnit):以指定的单位获取图像的界限。GetThumbnailImage(Int32, Int32, Image+GetThumbnailImageAbort, IntPtr):返回此 Image 的缩略图。RotateFlip(RotateFlipType):旋转、翻转或者同时旋转和翻转 Image。Save(Stream, ImageFormat):将此图像以指定的格式保存到指定的流中。Save(String, ImageFormat):将此 Image 以指定格式保存到指定文件。

      4、绘制图片:

      using (Image img = new Bitmap(@"C:1.jpg"))
      {
          System.Drawing.Graphics g = Graphics.FromImage(img);
          g.DrawImage(img, new System.Drawing.Rectangle(0, 0, img.Width, img.Height));
      }

      5、缩放:

      Image img1 = new Bitmap(@"C:1.jpg");
      using (Image smallImage = new Bitmap(img1, new Size(img1.Width / 2, img1.Height / 2)))
      {
          //...
      }

      6、获取缩略图

      Bitmap myBitmap = new Bitmap("Climber.jpg");
      Image myThumbnail = myBitmap.GetThumbnailImage(40, 40, null, IntPtr.Zero);
      e.Graphics.DrawImage(myThumbnail, 150, 75);

      7、旋转

      Image img = Bitmap.FromFile(@"C:music.bmp");
      PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
      PictureBox1.Image = img;
      //旋转
      img.RotateFlip(RotateFlipType.Rotate180FlipY);
      PictureBox1.Image = img;

      8、双倍缓冲

      //创建一个与窗体工作区大小相同的空位图
      using (Bitmap image = new Bitmap(ClientRectangle.Width, ClientRectangle.Height))//创建位图实例
      {
          Graphics g = Graphics.FromImage(image);//以此图像做画布,画图形
          g.FillRectangle(Brushes.White, ClientRectangle);
          g.DrawImage(image, ClientRectangle);  //在窗体中绘制出内存中的图像
      }

      9、格式转换与保存:

      img.Save("c:/1.jpg", ImageFormat.Jpeg);
      img.Save("c:/1.gif", ImageFormat.Gif);

      二、打印>

      1、打印预览

      PrintDocument pd = new PrintDocument();
      pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
      PrintPreviewDialog ppd = new PrintPreviewDialog();
      ppd.Document = pd;
      ppd.ShowDialog();

      2、打印

      PrintDocument pd = new PrintDocument();
      pd.DefaultPageSettings.PrinterSettings.PrinterName = "ZDesigner GX430t";       //打印机名称
      pd.DefaultPageSettings.Landscape = true;  //设置横向打印,不设置默认是纵向的
      pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
      pd.Print();

      3、分页打印文本文件

      多页打印必须把HasMorePages>

      当HasMorePages 设为true后,PrintDocument_PrintPage重复自我运行,直到HasMorePages 设为false。

      private string text = string.Empty;
      private int top = 0;
      private Size textSize = Size.Empty;
      
      
      private void button1_Click(object sender, EventArgs e)
      {
          text = this.textBox1.Text;
          PrintDocument pd = new PrintDocument();
          pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
          pd.BeginPrint += new PrintEventHandler(pd_BeginPrint);
      
          using (System.Windows.Forms.PrintPreviewDialog dlg = new PrintPreviewDialog())
          {
              dlg.Document = pd;
              dlg.WindowState = FormWindowState.Maximized;
              dlg.AllowTransparency = true;
              dlg.AutoScaleMode = AutoScaleMode.Dpi;
              dlg.ShowDialog();
          }
      }
      
      private void pd_BeginPrint(object sender, PrintEventArgs e)
      {
          textSize = Size.Empty;
          top = 0;
      }
      
      private void pd_PrintPage(object sender, PrintPageEventArgs e)
      {
          if (textSize == Size.Empty)
          {
              textSize = Size.Round(e.Graphics.MeasureString(text, Font, e.MarginBounds.Width));
          }
          e.Graphics.SetClip(e.MarginBounds);
          e.Graphics.DrawString(text, this.Font, Brushes.Black, new Rectangle(e.MarginBounds.Location.X, e.MarginBounds.Location.Y + top * -1, textSize.Width, textSize.Height)); ;
          if (top + e.MarginBounds.Height < textSize.Height)
          {
              top = top + e.MarginBounds.Height;
              e.HasMorePages = true;
          }
      }

      到此这篇关于C#中图像Image类与打印Printing类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持易采站长站。