C#图片处理常见方法性能比较

 在.NET编程中,由于GDI+的出现,使得对于图像的处理功能大大增强。在文通过一个简单黑白处理实例介绍在.NET中常见的图片处理方法和原理并比较各种方法的性能。
 黑白处理原理:彩色图像处理成黑白效果通常有3种算法;
 (1)最大值法: 使每个像素点的 R, G, B 值等于原像素点的 RGB (颜色值) 中最大的一个
 (2)平均值法: 使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值
 (3)加权平均值法: 对每个像素点的 R, G, B值进行加权
自认为第三种方法做出来的黑白效果图像最 "真实".
 1.GetPixel方法
     GetPixel(i,j)和SetPixel(i, j,Color)可以直接得到图像的一个像素的Color结构,但是处理速度比较慢.
 2.内存拷贝法
     内存拷贝法就是采用System.Runtime.InteropServices.Marshal.Copy将图像数据拷贝到数组中,然后进行处理,这不需要直接对指针进行操作,不需采用unsafe,处理速度和指针处理相差不大,处理一副1440*900的图像大约需要34ms。
 3.指针法
    指针在c#中属于unsafe操作,需要用unsafe括起来进行处理,速度最快,处理一副180*180的图像大约需要18ms。

 比较以上方法优缺点:
    1.总体上性能 指针法略强于内存拷贝法,直接提取像素法性能最低。
    2.对大图片处理指针法和内存拷贝法性能提升明显,对小图片都比较快。
    3.直接提取像素法简单易用,而且不必关注图片像素格式(PixelFormat),为安全代码;内存拷贝法和指针法如果不改变原图片像素格式要针对不同的像素格式做不同的处理,且为不安全代码。

posted @ 2012-05-10 11:51  咖喱牛排炒饭  阅读(250)  评论(0编辑  收藏  举报