Bitmap类

一.Bitmap类

Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下:

1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色.

2. PixelFormat属性:返回图像的像素格式.

3. Palette属性:获取和设置图像所使用的颜色调色板.

4. Height Width属性:返回图像的高度和宽度.

5. LockBits方法和UnlockBits方法:分别锁定和解锁系统内存中的位图像素.在基于像素点的图像处理方法中使用LockBits和UnlockBits是一个很好的方式,这两种方法可以使我们指定像素的范围来控制位图的任意一部分,从而消除了通过循环对位图的像素逐个进行处理,每调用LockBits之后都应该调用一次UnlockBits.

二.BitmapData类

BitmapData对象指定了位图的属性

1. Height属性:被锁定位图的高度.

2. Width属性:被锁定位图的高度.

3. PixelFormat属性:数据的实际像素格式.

4. Scan0属性:被锁定数组的首字节地址,如果整个图像被锁定,则是图像的第一个字节地址.

5. Stride属性:步幅,也称为扫描宽度.

如上图所示,数组的长度并不一定等于图像像素数组的长度,还有一部分未用区域,这涉及到位图的数据结构,系统要保证每行的字节数必须为4的倍数.

三.Graphics类

Graphics对象是GDI+的关键所在,许多对象都是由Graphics类表示的,该类定义了绘制和填充图形对象的方法和属性,一个应用程序只要需要进行绘制或着色,它就必须使用Graphics对象.

四.Image类

  这个类提供了位图和元文件操作的函数.Image类被声明为abstract,也就是说Image类不能实例化对象,而只能做为一个基类

1.FromFile方法:它根据输入的文件名产生一个Image对象,它有两种函数形式:

public static Image FromFile(string filename);

public static Image FromFile(string filename, bool useEmbeddedColorManagement);

2.FromHBitmap方法:它从一个windows句柄处创建一个bitmap对象,它也包括两种函数形式:

public static bitmap fromhbitmap(intptr hbitmap);

public static bitmap fromhbitmap(intptr hbitmap, intptr hpalette);

3. FromStream方法:从一个数据流中创建一个image对象,它包含三种函数形式:

public static image fromstream(stream stream);

public static image fromstream(stream stream, bool useembeddedcolormanagement);

fromstream(stream stream, bool useembeddedcolormanagement, bool validateimagedata);

有了上面的了解,我们便可以开始利用C#做图像处理,下面介绍几种方法:

一.   打开、保存、显示图像

privateBitmap srcBitmap = null;

privateBitmap showBitmap = null;

//打开文件

privatevoid menuFileOpen_Click(object sender, EventArgs e)

{

OpenFileDialog openFileDialog = newOpenFileDialog();

openFileDialog.Filter = @"Bitmap文件(*.bmp)|*.bmp|Jpeg文件(*.jpg)|*.jpg|所有合适文件(*.bmp,*.jpg)|*.bmp;*.jpg";

openFileDialog.FilterIndex = 3;

openFileDialog.RestoreDirectory = true;

if (DialogResult.OK == openFileDialog.ShowDialog())

{

srcBitmap = (Bitmap)Bitmap.FromFile(openFileDialog.FileName, false);

showBitmap = srcBitmap;

this.AutoScroll = true;

this.AutoScrollMinSize =

newSize((int)(showBitmap.Width), (int)(showBitmap.Height));

this.Invalidate();

}

}

//保存图像文件

privatevoid menuFileSave_Click(object sender, EventArgs e)

{

if (showBitmap != null)

{

SaveFileDialog saveFileDialog = newSaveFileDialog();

saveFileDialog.Filter =

@"Bitmap文件(*.bmp)|*.bmp|Jpeg文件(*.jpg)|*.jpg|所有合适文件(*.bmp,*.jpg)|*.bmp;*.jpg";

saveFileDialog.FilterIndex = 3;

saveFileDialog.RestoreDirectory = true;

if (DialogResult.OK == saveFileDialog.ShowDialog())

{

ImageFormat format = ImageFormat.Jpeg;

switch (Path.GetExtension(saveFileDialog.FileName).ToLower())

{

case".jpg":

format = ImageFormat.Jpeg;

break;

case".bmp":

format = ImageFormat.Bmp;

break;

default:

MessageBox.Show(this, "Unsupported image format was specified", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

try

{

showBitmap.Save(saveFileDialog.FileName,format );

}

catch (Exception)

{

MessageBox.Show(this, "Failed writing image file", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

}

}

时间: 2024-08-07 11:13:20

Bitmap类的相关文章

Android图像处理之Bitmap类

Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能. 一.Bitmap的生成 1.1 BitmapFactory decode出Bitmap Bitmap实现在android.graphics包中.但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化.这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实现通过

c#图像处理入门(-bitmap类和图像像素值获取方法)

c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色. 2. PixelFormat属性:返回图像的像素格式. 3. Palette属性:获取和设置图像所使用的颜色调色板. 4. Height Width属性:返回图像的高度和

C#中的bitmap类和图像像素值获取方法

一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色. 2. PixelFormat属性:返回图像的像素格式. 3. Palette属性:获取和设置图像所使用的颜色调色板. 4. Height Width属性:返回图像的高度和宽度. 5. LockBits方法和UnlockBits

C#中Bitmap类 对图像の操作 可检测图片完整性

public static byte[] BitmapToBytes(Bitmap Bitmap)         {             try             {                 using (MemoryStream ms = new MemoryStream())                 {                     Bitmap.Save(ms, Bitmap.RawFormat);                     byte[]

Android图像处理之Bitmap类(1)

Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能. 一.Bitmap的生成 1.1 BitmapFactory decode出Bitmap    Bitmap实现在android.graphics包中.但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化.这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实

Bitmap类相关——getPixels

public void getPixels(int[] pixels, int offset, int stride,int x, int y, int width, int height) 获取原Bitmap的像素值存储到pixels数组中. 参数: pixels     接收位图颜色值的数组 offset     写入到pixels[]中的第一个像素索引值 stride     pixels[]中的行间距个数值(必须大于等于位图宽度).不能为负数 x          从位图中读取的第一个像

(3)Bitmap类相关——getPixels

public void getPixels(int[] pixels, int offset, int stride,int x, int y, int width, int height) 获取原Bitmap的像素值存储到pixels数组中. 参数: pixels     接收位图颜色值的数组 offset     写入到pixels[]中的第一个像素索引值 stride     pixels[]中的行间距个数值(必须大于等于位图宽度).不能为负数 x          从位图中读取的第一个像

简单验证码的识别:Bitmap类的使用

验证码的智能识别是一项比较复杂的工作,甚至需要掌握点图像学的知识. 当然对于写程序的来说不用那么深入,只需要掌握几个常规步骤就行了. 验证码图像识别步骤:1.获取图像 2.清除边框 3.灰度处理 4.二值化处理 5.噪点处理 6.图像分割 7.识别单个数字 8.拼接验证码 一.获取图像 图像一般是远程的,所以需要用到WebRequest: public Bitmap GetImg(string imgUrl) { WebRequest wreq = WebRequest.Create(imgUr

(2)Bitmap类相关

1. public Bitmap extractAlpha() 生成只提取了原图的alpha通道的新图,也就是说新的bitmap只有alpha值,rgb值为0.这个函数的作用是获取原图的轮廓,然后可以填充rgb值. 使用如下的代码片段来验证这个函数: public Bitmap process() { Bitmap destImage = Bitmap.createBitmap(400, 400, Config.ARGB_8888); int color = 0xAFFF0000; //半透明红