http://blog.csdn.net/rabbit_in_android/article/details/49967461android
Bitmap:数组
(1) public Bitmap (int width,int height,int stride, PixelFormat format,IntPtr scan0)ide
用指定的大小、像素格式和像素数据初始化 Bitmap 类的新实例。post
(2) LockBits():,就是把图像的内存区域根据格式锁定,拿到那块内存的首地址。这样就能够直接改写这段内存了。这个方法的设计是挺好,惋惜都是C++做为源泉来的,.NET Framework里面根本就不推荐用指针,须要用Marshal.Copy把内容Copy到一个byte数组里面,而后处理完了再Copy回去。.net
(3) UnlockBits():从系统内存解锁此 Bitmap。设计
BitmapData:位图图像的属性指针
(1) Height获取或设置 Bitmap 对象的像素高度。有时也称做扫描行数。orm
(2) PixelFormat: 获取或设置返回此 BitmapData 对象的 Bitmap 对象中像素信息的格式。对象
(3) Reserved: 保留。不要使用。blog
(4) Scan0: 获取或设置位图中第一个像素数据的地址。它也能够当作是位图中的第一个扫描行。
(5) Stride: 获取或设置 Bitmap 对象的跨距宽度(也称为扫描宽度)。
Stride:跨距是单行像素(一个扫描行)的宽度,舍入为一个 4 字节的边界。跨距老是大于或等于实际像素宽度。若是跨距为正,则位图自顶向下。若是跨距为负,则位图颠倒。Stride是指图像每一行须要占用的字节数。根据BMP格式的标准,Stride必定要是4的倍数。据个例子,一幅1024*768的24bppRgb的图像,每行有效的像素信息应该是1024*3 = 3072。由于已是4的倍数,因此Stride就是3072。那么若是这幅图像是35*30,那么一行的有效像素信息是105,可是105不是4的倍数,因此填充空字节,Stride应该是108。这一行计算出来的offset就是3。一要注意必须是4的倍数,二单位是字节!
(6) Width: 获取或设置 Bitmap 对象的像素宽度。这也能够看做是一个扫描行中的像素数。
PixelFormat:
(1) Format24bppRgb,也就是24位色。在这种格式下3个字节表示一种颜色,也就是咱们一般所知道的R,G,B,因此每一个字节表示颜色的一个份量。
(2) Format32bppArgb,除了RGB,在图像中还存在一个通道,叫作A。这个A就是用来描述当前像素是透明,半透明,仍是全透明的份量。这个通道是2个叫Catmull和Smith在上世纪70年代初发明的。经过这个份量,咱们能够进行alpha混合的一些计算。从而使表面的图像和背景图像混合,从而形成透明半透明的效果。在这种格式下A做为一个byte,取值能够从0到255,那么0表示图像彻底透明,则彻底不可见,255则表示图像彻底不透明。每一个像素均可以实现这种透明或者半透明的效果。更详细解释能够参考http://en.wikipedia.org/wiki/Alpha_compositing,或者去买本数字图像处理的书回来看。
(3) Format32bppPArgb,这叫作premultiplied alpha,就是说在RGB份量里面,alpha份量的数据已经被预先乘进去了。好比说,一个半透明的红色点,在ARGB下,矢量是(255,0,0,128),而在PARGB下就变成了(128,0,0,128)。这是为了避免要每次都作乘法。
(4) Bitmap保存成为一个文件,那么必须用png格式,才可以保存alpha通道的信息。若是你存为JPG/BMP/GIF,那么alpha通道的信息将会被丢失。若是存为BMP,那么文件格式将变成Format32bppRgb,其中1个字节再也不使用;若是保存为JPEG,那么是Format24bppRgb;存为GIF,格式将变成Format8bppIndexed。根据标准,BMP/JPG原本就不支持透明通道,因此没有可能保留透明信息。GIF却是支持透明,可是GIF中颜色的信息都是索引,因此Alpha的解释对GIF彻底没有效果,
BitmapInfoHeader:
biHeight:说明图象的高度,以象素为单位。
若是该值是一个正数,说明Btimap是Bottom up DIB,起始点是左下角,也就是从图像的最下面一行扫描,位图数组中获得的第一行数据实际是图形的最下面的一行。图像是倒向的;
若是该值是一个负数,则说明图像是TopDown DIB,起始点是左上角,图像从最上面一行扫描,图像正向的。
大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。(注:当高度值是一个负数时(正向图像),图像将不能被压缩(也就是说biCompression成员将不能是BI_RLE8或BI_RLE4)