C#.net 图像处理基础知识入门级
入门基础必备:
-
C#类库的GDI+可以支持图像处理
-
bitmap主要是处理图片的
直接利用文件名创建一个对象
利用已有的对象来创建
或者在内存里创建 利用宽,高创建
FromFile的方式创建 -
更一般的图像处理,可以用图像的像素处理:
- 用GetPixel(x,y)得到目标像素点的颜色的方法,用这种方式比较慢。
- 更一般的方法在处理图像是用指针
C#是支持指针的,但是一般我们不用,在处理图像的时候,直接涉及到内存,就可以使用指针。
基本方法是:用到LockBits()就是锁住像素的二进制位。
这里得到了一个像素对象。
此对象的 Scan0的属性可以简单理解为第一个像素点的位置在内存中位置。
这里是强制转化为指针的意思。理解为内存里的像素怎么存的。
pBase是指针的基位置。也就是第0个位置。
y代表高度。x表示宽度。
stride也是bitmapData的属性表示图像的一行在内存里占的字节数。是已经计算好了的。
解释是怎么计算的:一般图像是24位(也就是红绿蓝三个字节的话),大体上一行的宽度相当于图像的宽度乘以三(因为一个点占三个字节),但是习惯于一行里占的字节数是四的倍数,如果宽度乘以三不是四的倍数,就会自动补齐。
x*sizeof(PixIDdata)每一个点占的像素数
用指针一下就可以找到这个点。
-
比较这两种方法:普通的方法是指针方法所用时间的五倍
- 用普通GetPiexl方法:
- 用指针的方式:把普通的bitmap包装成unsafeBitmap,用指针的方式得到像素点:
得到指针
注意:
PixIDdata的结构:就是红绿。一般来说红是高字节的,把它放在后面。
图像处理,在C#主要是对像素的各种运算。
- 用普通GetPiexl方法:
-
图像处理:如图像滤镜