2.为了显示的方便,除了真彩色外,其他的每中颜色模式的行字节数要用数据“00”补齐为4的整数倍。如果显示模式为16色,当图像宽为19时,存储时每行则要补充4-(19/2+1)%4=2个字节(加1是因为里面有一个像素点要独占了一字节)。如果显示模式为256色,当图像宽为 19时,每行也要补充4-19%4=1个字节。
还有一点,当屏幕初始化为16或256色模式时,一定要设置调色板或修正颜色值,否则无法得到正确的图像颜色。
Bitmap类
Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成。因此Bitmap是用于处理由像素数据定义的图像的对象。该类的主要方法和属性如下。
GetPixel方法和SetPixel方法:获取和设置一个图像的制定像素的颜色。
PixelFormat属性:返回图像的像素格式。
Palette属性:获取或设置图像所使用的颜色调色板。
Height属性和Width属性:返回图像的高度和宽度。
Bitmap类的常用方法如下:
GetPixel:获取对象中指定像素的颜色。其使用方法如下:
Color pixelColor = bmp.GetPixel(x,y);
MakeTransparent:使默认的透明颜色对此对象透明。
RotateFlip:旋转、翻转或者同时旋转和翻转对象。它主要有三种翻转方式,即90度、180度和270度。具体使用方法如下:
Image tmp = curBitmap;//定义一个Image
tmp.RotateFlip(RotateFlipType.Rotate90lipNone);//旋转90度
tmp.RotateFlip(RotateFlipType.Rotate90lipNone);//旋转180度
tmp.RotateFlip(RotateFlipType.Rotate90lipNone);//旋转270度
Save:将对象以指定的格式保存到指定的Stream对象。
Setpixel:设定对象中,指定像素颜色。其使用方法如下:
Bitmap bmp = (Bitmap)this.pictureBox.Image;
Color pixelcolor =Color.FromArgb(ca,cr,cg,cb);
bmp.SetPixel(x,y,pixelcolor);
ca代表Alpha分量值,0为全透明,255为完全不透明,cr、cg、cb是红绿蓝三个颜色分量,值等于255时对应于该颜色值的饱和色。X,y是设置颜色的像素点坐标。
LookBits方法和UnlockBits方法:分别锁定和解锁系统内存中的位图像素。在基于像素点的图像处理方法中使用LockBits和UnlockBits是一个很好的方式,这两种方法可以使我们通过指定像素的范围来控制位图的任一部分,从而消除了通过循环对位图的像素逐个进行处理的需要。每次调用LockBits之后都应该调用一次UnlockBits。
LockBits方法定义如下:
public BitmapData LockBits (Rectangle rect, ImageLockMode flag, PiexlForm format );
LockBits方法使用3个类型,分别为Rectangle、ImageLockMode 枚举和PiexlForm枚举的参数,并返回一个类型为BitmapData的对象。其中矩形参数定义了要在系统内存中锁定的位图的一部分;ImageLockMode枚举提供了对数据的访问方式,表1所示是它的成员;PiexlForm枚举表示像素的格式,表2所示是它的主要成员。
表格 3.1 ImageLockMode主要成员
成员 描述
ReadOnly 位图的锁定部分只用于读操作
ReadWrite 位图的锁定部分用于读操作和写操作
UserInputBuffer 读取和写入像素数据的缓存由用户分配
WriteOnly 位图的锁定部分只用于写操作
表格 3.2 PiexlForm主要成员
成员 描述
Format1bppIndexed 每个像素1位,使用索引颜色,因此颜色表中有两种颜色
Format4bppIndexed 每个像素4位,使用索引颜色
Format8bppIndexed 每个像素8位,使用索引颜色
Format16bppGrayScale 每个像素16位,共指定65535种色调
Format24bppRgb 每个像素24位,红色、绿色、蓝色分量分别使用8位,它们的顺序是蓝、绿、红 C#彩色图像的伪色空间处理程序设计(11):http://www.youerw.com/jisuanji/lunwen_1742.html