之前我已经介绍了利用图片的像素点来做图像处理,这篇开始我要采取更有效率的处理方式,也就是内存处理。
为了将图像数据锁定到内存,从而换来更高处理效率,我们需要使用Bitmap
.LockBits() 方法获得一个BitmapData 类,
使用完毕内存后使用Bitmap
.UnlockBits(BitmapData) 方法解锁占用的内存。
Height 获取或设置 Bitmap 对象的像素高度。 有时也称作扫描行数。
PixelFormat 获取或设置返回此 BitmapData 对象的 Bitmap 对象中像素信息的格式。
Scan0 获取或设置位图中第一个像素数据的地址。 它也可以看成是位图中的第一个扫描行。
Stride 获取或设置 Bitmap 对象的跨距宽度(也称为扫描宽度)。
Width 获取或设置 Bitmap 对象的像素宽度。 这也可以看作是一个扫描行中的像素数。
PixelFormat 获取或设置返回此 BitmapData 对象的 Bitmap 对象中像素信息的格式。
Scan0 获取或设置位图中第一个像素数据的地址。 它也可以看成是位图中的第一个扫描行。
Stride 获取或设置 Bitmap 对象的跨距宽度(也称为扫描宽度)。
Width 获取或设置 Bitmap 对象的像素宽度。 这也可以看作是一个扫描行中的像素数。
我们先来看看Bitmap
.LockBits()方法:
Public
Function LockBits ( _
rect As Rectangle,_
rect As Rectangle,_
flags
As ImageLockMode,_
format As PixelFormat _
) As BitmapData
format As PixelFormat _
) As BitmapData
其中
format:这是一个PixelFormat 枚举,指定此 Bitmap 的数据格式,包括
Format4bppIndexed 指定格式为每像素 4 位而且已创建索引。
Format8bppIndexed 指定格式为每像素 8 位而且已创建索引。 因此颜色表中有 256 种颜色。
Format16bppRgb555 指定格式为每像素 16 位;红色、绿色和蓝色分量各使用 5 位。 剩余的 1 位未使用。
Format24bppRgb 指定格式为每像素 24 位;红色、绿色和蓝色分量各使用 8 位。
Format8bppIndexed 指定格式为每像素 8 位而且已创建索引。 因此颜色表中有 256 种颜色。
Format16bppRgb555 指定格式为每像素 16 位;红色、绿色和蓝色分量各使用 5 位。 剩余的 1 位未使用。
Format24bppRgb 指定格式为每像素 24 位;红色、绿色和蓝色分量各使用 8 位。
Format32bppArgb 指定格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。
……
需要注意的是,采用的数据格式会影响我们对图像数据的处理,通常情况下,我选用的是PixelFormat.Format24bppRgb,在之后的教程将以此格式举例。
由于.net平台下C#和vb@L_403_0@很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看 vb.net 教程 目录