C#.net 图像处理基础知识入门级

入门基础必备:

  • C#类库的GDI+可以支持图像处理
    C#.net 图像处理基础知识入门级

  • bitmap主要是处理图片的
    C#.net 图像处理基础知识入门级
    C#.net 图像处理基础知识入门级
    直接利用文件名创建一个对象
    C#.net 图像处理基础知识入门级
    利用已有的对象来创建
    C#.net 图像处理基础知识入门级
    或者在内存里创建 利用宽,高创建
    C#.net 图像处理基础知识入门级
    FromFile的方式创建

  • 更一般的图像处理,可以用图像的像素处理:

C#.net 图像处理基础知识入门级

  • 用GetPixel(x,y)得到目标像素点的颜色的方法,用这种方式比较慢。
    C#.net 图像处理基础知识入门级
  • 更一般的方法在处理图像是用指针
    C#是支持指针的,但是一般我们不用,在处理图像的时候,直接涉及到内存,就可以使用指针。
    基本方法是:用到LockBits()就是锁住像素的二进制位。

C#.net 图像处理基础知识入门级
这里得到了一个像素对象。
C#.net 图像处理基础知识入门级
此对象的 Scan0的属性可以简单理解为第一个像素点的位置在内存中位置。
这里是强制转化为指针的意思。理解为内存里的像素怎么存的。
pBase是指针的基位置。也就是第0个位置。
C#.net 图像处理基础知识入门级
y代表高度。x表示宽度。
stride也是bitmapData的属性表示图像的一行在内存里占的字节数。是已经计算好了的。
解释是怎么计算的:一般图像是24位(也就是红绿蓝三个字节的话),大体上一行的宽度相当于图像的宽度乘以三(因为一个点占三个字节),但是习惯于一行里占的字节数是四的倍数,如果宽度乘以三不是四的倍数,就会自动补齐。
x*sizeof(PixIDdata)每一个点占的像素数
用指针一下就可以找到这个点。

  • 比较这两种方法:普通的方法是指针方法所用时间的五倍

    • 用普通GetPiexl方法:
      C#.net 图像处理基础知识入门级
    • 用指针的方式:把普通的bitmap包装成unsafeBitmap,用指针的方式得到像素点:
      C#.net 图像处理基础知识入门级
      C#.net 图像处理基础知识入门级
      C#.net 图像处理基础知识入门级
      得到指针
      C#.net 图像处理基础知识入门级
      注意:
      PixIDdata的结构:就是红绿。一般来说红是高字节的,把它放在后面。
      图像处理,在C#主要是对像素的各种运算。
  • 图像处理:如图像滤镜
    C#.net 图像处理基础知识入门级