图像处理---基础
1.类
GDI+提供了两个类可以用于表示图像:Bitmap类和Metafile类,这两个类都继承自Image类.
Image类: 为 Bitmap 和 Metafile 的类提供功能的抽象基类。因此不能直接创建Image对象,
只能创建继承自它的Bitmap和Metafile类的实例.
Bitmap类:封装 GDI+ 位图,提供了处理位图的功能。允许控制基于光栅的位图的基本特性,
如大小、分辨率、颜色深度、是否包含Alpha信息、是否使用颜色地图等。
Metafile类:定义图形图元文件。图元文件包含描述一系列图形操作的记录,这些操作可以被
记录(构造)和被回放(显示)。此类不能继承。(MSDN)
提供了处理矢量图像的功能。
2.位图图像的颜色
图像像素颜色由三种基本颜色有机组合而成,即红-R、绿-G、蓝-B称为三原色。
每种基色可取0~255的值。每种颜色都有对应的R、G、B值。
3.图像颜色值的获取
通过Bitmap类的GetPixel()方法获取图像上指定像素的颜色值。
Color color = new Color();
color = bitmap.GetPixel(i,j);
以上bitmap表示Bitmap类的一个实例,(i,j)表示取得图像颜色的坐标位置。
4.位图颜色值分解
像素颜色值是一个长整型的数值,占4个字节,分别代表A、B、G、R。
从Color中分解R、G、B可直接使用:
int r,g,b;
Color color = new Color();
r = color.R;
g = color.G;
b = color.B;
5.图像的RGB和亮度、色差信号间值得关系
| Y | | 0.31 0.59 0.11 | | R |
| I | = |0.60 -0.28 -0.32 | | G |
| Q | |0.21 -0.52 -0.31 | | B |
这样,亮度Y为:Y=0.31R + 0.59G + 0.11B
6.图像像素颜色的设定
设置像素使用Bitmapl类的SetPixel()方法:
bitmap.SetPixel(i,j,Color.FromArgb(r,g,b));
bitmap为Bitmap类的实例,i、j为图像的坐标点,r、g、b为图像的R、G、B值。
7.LockBits处理图像像素
GetPixel()、SetPixel()处理图像像素比较方便,然而面对大量的图像像素数据时,程序会很慢。
C#提供了一种高效率的像素处理方法即使用LockBits方法。
LockBits方法类似于C++中的指针概念,直接操作内存中的像素数据,因此被认为是不安全的,
需在Unsafe模式下使用它。