C#学习笔记(1)

一、命名空间(namespace)

  命名空间相当于一个容器,它包含一组定义的类或结构,命名空间也可以嵌套在另一个命名空间中,就像文件目录一样。具有相同名称的类如果在不同的命名空间中,调用时不会产生混淆。

.NET类库中常用的命名空间

命名空间                                类的功能                                                                                          
System 

包含基本类和基类,定义常用的数据类型、数据转换、数学运算、异常处理等

System.Collections.Generic 包含定义泛型集合的接口和类,使用泛型集合来创建强类型集合
System.Data 提供对表示ADO.NET结构的类的访问
System.IO 包含允许读写文件盒数据流的类型以及提供基本文件和目录支持的类型
System.Drawing 提供对GDI+基本图形功能的访问
System.Net 为网络上使用的多种协议提供简单的编程接口
System.Net.Sockets 提供Windows套接字访问的方法
System.Text 包含ASCII、Unicode、UTF-7、UTF-8字符编码的类和用于字符处理的类
System.Threading 提供一些使得可以进行多线程编程的类和接口
System.Windows.Forms 包含创建基于Windows的应用程序的类,以利用操作系统中提供的界面功能
System.Web 提供使得可以进行浏览器与服务器通信的类和接口
System.Xml 提供对XML文档进行处理的类

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二、图像处理基础

  在C#中可以通过3中方法来对图像的像素点进行操作,即直接操作法、内存复制法和指针法。

  1、直接操作法

  (1)方法和过程

  这种方法处理图像的基本过程如下:

  a.直接使用GDI+中的Bitmap.GetPixel方法来读取当前像素的信息(颜色)。

  b.直接使用GDI+中的Bitmap.SetPixel方法来设置当前像素的信息(颜色)。

  (2)构造函数

  这两个方法的构造函数如下:

  public Color GetPixel(int x,int y)

  其中,参数x和y的类型都是System.Int32,表示要检索的像素的x和y坐标。返回值的类型是System.Drawing.Color结构,表示指定像素的颜色。

  public Color SetPixel(int x,int y)

  其中,参数x和y的类型都是System.Int32,表示要检索的像素的x和y坐标。返回值的类型是System.Drawing.Color结构,表示分配给指定像素的颜色。

  (3)示例代码

//获取当前像素点的RGB颜色值
crtColor = crtBitmap.GetPixel(5,3);
//设置当前像素点新的RGB颜色值
crtBitmap.SetPixel(5,3,Color.FromArgb(crtColor.R,0,0);

  2、内存法

  (1)方法和过程

  这种方法处理图像的基本过程如下:

  a.在开始处理图像之前,利用LockBits方法将Bitmap锁定到系统内存中。

  b.利用Marshal.Copy方法将已锁定到系统内存中的图像数据复制到一个字节数组中。

  c.在该字节数组中对图像的像素点进行操作,即实施图像处理。

  d.执行c的反过程,即利用Marshal.Copy方法将字节数组中的图像数据复制到锁定的系统内存中。

  e.利用UnlockBits方法解除被锁存的处理图像数据,图像处理结束。

  由于这种方法的全部操作都在内存中进行,所以可使程序的运行速度提高很多。

  (2)示例代码

  仅保留一幅图像中的红色信息的图像处理(此内存法图像处理程序假定图像的宽和高均为4的倍数)。

//获取被处理图像的大小
Rectangle rect = new Rectangle(0,0,crtBitmap.Width,crtBitmap.Height);
//将被处理的图像数据锁存
System.Drawing.Imaging.BitmapData bmpData = crtBitmap.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite,crtBitmap.PixelFormat);
//获取第一个像素的地址
IntPtr ptr = bmpData.Scan0;
//计算该被处理的24位字节总数
int bytes =  crtBitmap.Width*crtBitmap.Height*3;
//根据以上字节总数创建用于保存图像数据的字节数组
byte[] rgbValues = new byte[bytes];
//将被锁存的图像数据复制到数组中
System.Runtime.InteropServices.Marshal.Copy(ptr,rgbValues,0,bytes);
for(int i=0;i<rgbValues.Length;i+=3)
{
    //处理像素点
    rgbValues[i]=0;
    rgbValues[i+1]=0;
    //rgbValues[i+2]=0;    //保存其中的红色信息(不处理)
}
//将数组数据复制回位图中
System.Runtime.InteropService.Marshal.Copy(rgbValues,0,ptr,bytes);
//解除被处理的图像数据的锁存,图像处理结束
crtBitmap.UnlockBits(bmpData);            

  3、指针法

  (1)方法和过程

  这种方法处理图像的基本过程如下:

  a.在开始处理图像之前,利用LockBits方法将Bitmap锁定到系统内存中。

  b.直接利用指针对图像的像素点进行操作,即实施图像处理。

  c.利用UnlockBits方法解除被锁定的处理图像数据,图像处理结束

  (2)示例代码

  仅保留一幅图像中的红色信息的图像处理。 

//获取被处理图像的大小
Rectangle rect = new Rectangle(0,0,crtBitmap.Width,crtBitmap.Height);
//将被处理的图像数据锁存
System.Drawing.Imaging.BitmapData bmpData = crtBitmap.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite,crtBitmap.PixelFormat);
//启动非安全代码,以便使用指针
unsafe
{
    //得到第一个字节的首地址(指针起点)
    byte* ptr=(byte*)(bmpData.Scan0);
    //二维图像循环
    for(int i=0;i<bmpData.Height;i++)
    {
        for(int j=0;j<bmpData.Width;j++)
        {
          //处理像素点
          ptr[0]=0;
       ptr[
1]=0;
       //ptr[2]=0; //保留其中的红色信息(不处理) //指向下一个像素 ptr+=3;
     }
//指向下一行的首字母(“*3”表示24位位图) ptr+=bmpData.Stride-bmpData.Width*3; } } //解除被处理图像数据的锁存,图像处理结束 crtBitmap.UnlockBits(bmpData);

  4、3种方法的比较

  (1)直接操作法代码编写简单,代码行少,且以二维坐标方式表示像素点,所以直观易理解,但是其运行效率非常低,仅在图像尺寸不大。算法简单且对处理速度要求不高的情况下适用。

  (2)内存法代码编写在3种方法中最复杂,代码行最多,以一维数组方式表示二维的像素点,不如直接操作法直观、易理解;另外,对图像每行字节需为4的倍数的编程处理稍复杂。但其运行效率却比直接操作法有显著提高,且其代码的安全性容易维护。

  (3)指针法代码编写复杂程度和代码行数介于前两种方法之间,其指针式的像素表示也不如直接操作法直观、易理解;但是,对图像每行字节需为4的倍数的编程处理比内存法容易;另外,其代码的安全性不易维护,对程序开发者的编程水平要求较高。然而,其运行效率却是最高的。

三、文件加密

  1、MD5

  (1)命名空间:System.Security.Cryptography

四、语音识别基础

  1、基本步骤

  (1)在所建项目的解决方案管理器中右键选择“添加引用”,找到“Microsoft Speech object library",选中并点击确定。

  (2)在程序中添加命名空间:SpeechLib

  

 

    

  

 

posted @ 2013-08-24 20:41  EzRobot  阅读(324)  评论(0编辑  收藏  举报