首先声明,本系列笔记既“采菊东篱下”,又“悠然见南山”。是笔者在学习C#的图像处理的过程中借鉴、引申的笔录。欢迎访客指正。
(原文链接 http://ddbiz.com/?p=123)
概念要点:
1. 图像格式
为简单起见,笔者的学习是从 Bitmap.PixelFormat == PixelFormat.Format24bppRgb 开始的。因为这个图像格式采用的是24位色,每3个字节表示一个颜色,每字节分别对应R G B。
Bitmap 对象是对图像处理的一个非常方便的封装。如无特别说明,笔记中的所有图像处理,都为 Bitmap 且 Bitmap.PixelFormat=Format24bppRgb的格式。
2. 图像数据 - BitmapData
BitmapData是位图图像的属性封装,可以通过
BitmapData bmpdata = Bitmap.LockBits()来获得。
其相应的属性列表如下:
BitmapData.Height, 像素高度,或叫扫描行数
BitmapData.Width, 像素宽度,或叫一个扫描行中的像素数
BitmapData.Scan0, 像素数据的起始地址,当然也是位图数据中的第一行的开始。
BitmapData.Stride, 跨距宽度,或叫扫描宽度。MSDN的示意为: 跨距是单行像素(一个扫描行)的宽度,舍入为一个 4 字节的边界。如果跨距为正,则位图自顶向下。如果跨距为负,则位图颠倒。用程序员的语言表述,就是: Stride指一个扫描行占用的字节数。根据BMP格式的标准,Stride一定是4的倍数。比如一个 24x1