图形图像
一、 图形的种类。
1、矢量图
矢量图像,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。既然每个对象都是一个自成一体的实体,就可以在维持它原有清晰度和弯曲度的同时,多次移动和改变它的属性,而不会影响图例中的其它对象。这些特征使基于矢量的程序特别适用于图例和三维建模,因为它们通常要求能创建和操作单个对象。基于矢量的绘图同分辨率无关。这意味着它们可以按最高分辨率显示到输出设备上。
矢量图与位图最大的区别是,它不受分辨率的影响。因此在印刷时,可以任意放大或缩小图形而不会影响出图的清晰度
矢量图:是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件战用内在空间较小,因为这种类型的图像文件包含独立的分离图像,可以自由无限制的重新组合。它的特点是放大后图像不会失真,和分辨率无关,文件占用空间较小,适用于图形设计、文字设计和一些标志设计、版式设计等。
2、 位图
亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增多单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。在体检时,工作人员会给你一个本子,在这个本子上有一些图像,而图像都是由一个个的点组成的,这和位图图像其实是差不多的。由于每一个像素都是单独染色的,您可以通过以每次一个像素的频率操作选择区域而产生近似相片的逼真效果,诸如加深阴影和加重颜色。缩小位图尺寸也会使原图变形,因为此举是通过减少像素来使整个图像变小的。同样,由于位图图像是以排列的像素集合体形式创建的,所以不能单独操作(如移动)局部位图。
二、 C#中对于图形的支持。
在C#语言中所有有关于图形图像的类全部多被封装在System.Drawing名词空间下了,主要的类有Image、Bitmap、metafile源文件。
Object类 |
↓
MershalByRefObject |
↓
Image(抽象类) |
↓
Bitmap |
Metafile |
三、 图形的加载。
在C#语言中想要将指定的图形加载到我们指定的位置上就要使用Image类,但是这个类是个抽象类,在我们以前学习抽象类时我讲过,抽象类是不可以构造对象的,不过微软为我们做了几种专门用来让抽象类构造对象的方式,这些方法全部都在Image的静态方法中。
1、FromFile(string str);
//给于指定的图片路径。
2、FromFile(string str , bool useEmbeddedColorManagement);
//给予指定的图片路径,以及是否使用图像文件中嵌入的颜色管理。
3、FromStream(Stream stream);
//使用流文件导入图片,这个以后将会在我们学挽流以后才会使用到。
四、 图像的绘制以及Image的使用方式。
在我以前讲课的时候曾经说过,在C#语言当中如果关系到绘制时,就一定于Graphics绘制类有关系,当然在使用Image进行绘制图片时也于这个类有很大的关系,在这个类对象的方法中,有一个方法叫做DrawImage这个方法中。
1、DrawImage(Image mag,int x,int y);
//给予指定的Image对象,在窗体的X于Y位置上绘制。
2、DrawImage(Image mag,int x,int y,int Width,int Height);
//给予指定的Image对象,在窗体的X于Y位置上按照指定的大小进行绘制。
例:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Hty
{
class MyForm : Form
{
Image mge;
static void Main()
{
Application.Run(new MyForm());
}
public MyForm()
{
this.Text = "图形图像";
mge = Image.FromFile("虎.jpg");
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics grfx = e.Graphics;
grfx.DrawImage(mge, 0, 0,this.Width,this.Height);
}
}
}
五、 如何在图像上绘制。
在上边我们学会了应该如何在窗体上进行绘制图片,现在我们来学习如何在图片上进行绘制于更改。
我们在往窗体上进行绘制时,需要通过获取当前窗体的所有信息,同样的我们要是向往图片上进行绘制,也要获取图片当前的信息,在Graphics类中有一个静态方法就是专门用来获取图片信息提供给要绘制者使用的。
例、Graphics grfx = Graphics.FromImage(Image mag);
//我们只需要把要被绘制的图片信息放入到这个方法的参数中,就可以直接获取到要绘制的信息了。
六、 保存图片。
在上边我们学到了如何在指定的图片上进行绘制,但是当我们绘制完后发现,在刚刚绘制上去的东西没有保存到图片中,其实想要将绘制后的图片进行保存需要使用Image类中的Save方法。
1、Save(String strFileName);
//将绘制完后的图片保存到硬盘中的指定位置。
2、Save(String strFileName,ImageFormat imgfmt);
//将绘制完后的图片保存到硬盘中的指定位置,并且确认要存储的图片格式。
ImageFormat是一个静态类,它可以将我们的图像文件格式转换成指定的格式。例如将Bmp的文件转换成jpg的文件。
七、 ImageFormat类的属性。
类型 |
属性 |
访问方式 |
说明 |
ImageFormat |
Bmp |
读 |
获取图片格式(Bmp)。 |
ImageFormat |
Emp |
读 |
获取图片格式(Emp)。 |
ImageFormat |
Exif |
读 |
获取图片格式(Exif)。 |
ImageFormat |
Jpeg |
读 |
获取图片格式(Jpg)。 |
ImageFormat |
Icon |
读 |
获取图片格式(Icon)。 |
ImageFormat |
Gif |
读 |
获取图片格式(gif)。 |
ImageFormat |
Png |
读 |
获取图片格式(png)。 |
ImageFormat |
Tiff |
读 |
获取图片格式(tiff)。 |
ImageFormat |
Wmf |
读 |
获取图片格式(wmf)。 |
例:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace Hty
{
class MyForm : Form
{
Image mge;
static void Main()
{
Application.Run(new MyForm());
}
public MyForm()
{
this.Text = "图形图像";
mge = Image.FromFile("虎.jpg");
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics grfx = e.Graphics;
grfx.DrawImage(mge, 0, 0,this.Width,this.Height);
Graphics grfx2 = Graphics.FromImage(mge);
grfx2.DrawString("虎", new Font("宋体",200), Brushes.Black, 100, 100);
mge.Save("虎神.bmp", ImageFormat.Bmp);
}
}
}