在c#中进行图像处理,一般使用这三个类:Bitmap类,BitmapData类和Graphics类。
Bitmap类封装了GDI+中的一个位图,此位图由图形图像机器属性的像素数据组成。因此BItmap是用于处理由像素数据定义的图像的对象。该类一般用到一下几个方法和属性:
GetPixel和SetPixel方法:获取和设置一个图像的指定像素的颜色。
PixelFormat属性:返回图像的像素格式。
Height属性和Width属性:返回图像的高度和宽度。
LockBit方法和UnlockBits:分别锁定和解锁系统内存中的位图像素。在基于像素带你的图像处理方法中使用LockBits和UnlockBits是一个很好的方式,这两种方法可以使我们通过指定像素的范围来控制位图的任意一部分,从而消除了通过循环对位图的像素逐个进行处理的需要。每次调用LockBits之后都应该调用一次UnlockBits。
using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Imaging; using System.Diagnostics; namespace WindowsFormsApplication14 { public partial class Form1 : Form { //文件名 private string curFileName; //图像对象 private Bitmap curBitmap; private HiperfTimer myTimer; public Form1() { InitializeComponent(); myTimer = new HiperfTimer(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog opndlg = new OpenFileDialog(); opndlg.Filter = "所有图像文件|*.bmp;*.pcx;*.png;*.jpg;*.gif"; opndlg.Title = "打开图像文件"; if(opndlg .ShowDialog ()==DialogResult.OK ) { curFileName = opndlg.FileName; try { curBitmap = (Bitmap)Image.FromFile(curFileName); } catch (Exception ex) { MessageBox.Show(ex.Message); } } Invalidate(); } } }
先定义一个字符串和一个Bitmap类型的数据成员。
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; if(curBitmap !=null) { g.DrawImage(curBitmap, 160, 20, curBitmap.Width, curBitmap.Height); } }
当需要进行绘制时,必须通过Graphics对象来执行绘制操作。使用窗体的Paint事件,重载OnPaint方法,使用CreatGraphics方法创建Graphics对象。