一、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 以指定格式保存到指定文件。

绘制图片:

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));
}

缩放:

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

获取缩略图

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

旋转

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

双倍缓冲

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

格式转换与保存:

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;
}
}

图像Image类、打印Printing相关的更多相关文章

  1. Nao 类人机器人 相关资料

    Nao 类人机器人 相关资料: 1.兄妹 PEPPER :在山东烟台生产,http://www.robot-china.com/news/201510/30/26564.html 2.国内机器人领先公 ...

  2. WorldWind源码剖析系列:图像助手类ImageHelper

    图像助手类ImageHelper封装了对各种图像的操作.该类类图如下. 提供的主要处理方法基本上都是静态函数,简要描述如下: public static bool IsGdiSupportedImag ...

  3. 某音乐类App评论相关API的分析及SQL注入尝试

    关键字:APIfen.工具使用.sql注入 涉及工具/包:Fiddler.Burpsuite.Js2Py.Closure Compiler.selenium.phantomjs.sqlmap 摘要: ...

  4. day15--Java常用类之日期相关类

    Java常用类 3.日期相关类 3.1Date类 在标准Java类库中包含一个Date类,它的对象表示一个特定的瞬间,精确到毫秒.在网上商城下单时,在对报销单进行审核时,都需要获取当前的时间,通过Da ...

  5. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

  6. .net学习笔记----利用System.Drawing.Image类进行图片相关操作

    C#中对图片的操作主要是通过System.Drawing.Image等类进行. 一.将图片转换为字节流 /// <summary> /// 图片处理帮助类 /// </summary ...

  7. App是什么,可以分为几类?及其相关解释。

     App,是应用程序,Application的缩写,事实上,严格说来,目前市面上的APP大致可分为以下十类,即移动UGC,移动搜索,移动浏览,移动支付,移动广告,移动即时信息,SNS,LBS,AR以及 ...

  8. print打印网页相关

    作者:zccst 1,CSS <link href="/style/print.css" rel="stylesheet" type="text ...

  9. PrintService类打印

    系统打印服务框架代码位于android.printservice包中.系统并没有实现具体打印功能,需要打印机厂商制作插件接入系统打印服务之后,自行实现 主要类: PrintDocument:表示待打印 ...

随机推荐

  1. 认识 Spring 框架(一)

    认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP( ...

  2. Ubuntu将自带的python3升级

    一.这里演示的是将python3.5升级到python3.6 1.添加安装源,在命令行输入如下命令: sudo add-apt-repository ppa:jonathonf/python-3.6 ...

  3. diy操作系统 附录:gcc栈帧开启与关闭

    在gcc命令行参数中可以使用-fno-omit-frame-pointer来开启栈帧的使用,或者使用-fomit-frame-pointer选项来关闭. 然而,也可以针对某一个函数进行配置方法如下,这 ...

  4. c++学习总结(一)------类结构学习

    基类的构造函数并没有被派生类继承 析构函数和拷贝赋值操作符同样也没有 类的设计者通过把成员函数声明为 const 以表明它们不修改类对象 把一个修改类数据成员的函数声明为 const 是非法的 (51 ...

  5. (三)ActiveMQ之发布- 订阅消息模式实现

    一.概念 发布者/订阅者模型支持向一个特定的消息主题发布消息.0或多个订阅者可能对接收来自特定消息主题的消息感兴趣.在这种模型下,发布者和订阅者彼此不知道对方.这种模式好比是匿名公告板.这种模式被概括 ...

  6. (四)XML基础(客户端和服务端发送与接收xml数据)

    案例: index.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  7. 正则限制input负数输入

    //直接在input标签内加入下面两个事件处理程序即可 onkeyup="this.value=this.value.replace(/\D|^0/g,'')" onafterpa ...

  8. 安装window、linux双系统

    一.安装windows,从主硬盘中分出40G空间: 二.下载linux ios镜像; 三.安装UltraISO,把下载好的linux镜像写入u盘: ‘写入硬盘镜像’->写入方式‘usb-HDD+ ...

  9. spring 实现事务配置的方式

    spring 中常用的两种事务配置方式以及事务的传播性.隔离级别 一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2. ...

  10. Docker部署code-server

    Docker部署code-server 版本:codercom/code-server:v2 code-server可以放在服务器上,随时随地在浏览器中,编写代码.运行.调试: 手机,pad都可以进行 ...