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

 更新时间:2022年05月16日 08:16:53   作者:springsnow  
这篇文章介绍了C#中图像Image类与打印Printing类的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、Images

1、概述

Image 类为Bitmap(位图) 和 Metafile(矢量图) 的类提供功能的抽象基类。Image类不能直接创建对象的,但Image.FromFile()返回的是Bitmap或者Metafile的对象。

初始化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:获取此 Image 的像素格式。
  • RawFormat:获取此 Image 的文件格式。
  • Size:获取此图像的宽度和高度(以像素为单位)。
  • Width:获取此 Image 的宽度(以像素为单位)。
  • Height:获取此 Image 的高度(以像素为单位)。

3、方法

  • FromFile(String):从指定的文件创建 Image。
  • 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);

二、打印 System.Drawing.Printing

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 设为true,达到需要的页数后关掉此属性。否则无穷添加新页面!

当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类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于C#实现简易的键盘记录器

    基于C#实现简易的键盘记录器

    本文将利用C#语言和HOOK技术来做一个键盘记录器,看看一天下来,我们点击了多少次键盘,哪些键的使用频率最高,感兴趣的小伙伴可以尝试一下
    2022-08-08
  • C#实现的几种委托方式介绍

    C#实现的几种委托方式介绍

    这篇文章主要是介绍C#实现的几种委托方式,需要的朋友可以参考下
    2013-03-03
  • c# 实现雪花分形的示例

    c# 实现雪花分形的示例

    这篇文章主要介绍了c# 实现雪花分形的示例,帮助大家更好的利用c#绘制图像,感兴趣的朋友可以了解下
    2020-10-10
  • C#词法分析器之构造NFA详解

    C#词法分析器之构造NFA详解

    本篇文章介绍了,C#词法分析器之构造NFA详解。需要的朋友参考下
    2013-05-05
  • c#二进制逆序方法详解

    c#二进制逆序方法详解

    这篇文章介绍了c#二进制逆序方法,有需要的朋友可以参考一下
    2013-10-10
  • C#留言时间格式化

    C#留言时间格式化

    本文给大家分享的是仿微博或者空间中,发布内容之后提示NN秒之前留言的代码,主要是通过发布时间和当前时间直接的差值来计算,十分的简单实用,有需要的小伙伴可以参考下。
    2015-05-05
  • C#6.0中你可能不知道的新特性总结

    C#6.0中你可能不知道的新特性总结

    C# 6 已经出来很久了,但最近发现真的有必要整理下,下面这篇文章主要给大家介绍了关于C#6.0中一些你可能不知道的新特性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2018-04-04
  • C#文件下载实例代码(适用于各个浏览器)

    C#文件下载实例代码(适用于各个浏览器)

    本文给大家分享一段实例代码关于css实现文件下载功能,需要的的朋友参考下吧
    2017-05-05
  • 详解二维码生成工厂

    详解二维码生成工厂

    本篇文章主要分享的是3个免费的二维码接口的对接代码和测试得出的注意点及区别。具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • DevExpress实现TreeList向上递归获取公共父节点的方法

    DevExpress实现TreeList向上递归获取公共父节点的方法

    这篇文章主要介绍了DevExpress实现TreeList向上递归获取公共父节点的方法,需要的朋友可以参考下
    2014-08-08

最新评论