可能是因为从事GIS行业的缘故,本人一直对图形编程比较感兴趣。不过对于图像处理接触倒是比较少。前一阵子,看了一本书是讲GDI+图像编程的书,感觉利用GDI+做图像处理比之前的GDI省力了很多。故随手写几篇文章,讲讲GDI+中简单的图像处理方法,以供初学者学习。

      数字像在算机上以位(bitmap)的形式存在,是一个矩形点,其中一点称像素(pixel),像素是数字像中的基本位。一幅m×n大小的像,是由m×n个明暗度不等的像素成的。数字像中各个像素所具有的明暗程度由灰度(gray level)标识。一般将白色的灰度义为255,黑色灰度义为0,而由黑到白之的明暗度均匀地划分256个等于黑白像,个像素用一个字数据来表示,而在彩色像中,个像素需用三个字数据来表述。彩色像可以分解成(R)绿(G)(B)三个像,任何一种颜色都可以由种颜色混合构成。在理中,彩色像的理通常是通过对其三个像分别处理而得到的。对于位图的相关概念这里就不再详细讲述。

    如果要将彩色图像转换为灰度图像,只要将图像中的每个像素取出来,然后取像素的RGB颜色分量,利用如下公式计算灰度值:

    int gray = r0.3 g0.59 b0.11;

不过我看到有些资料的灰度转换公式是这样:

    int gray = (rgb) / 3;

两种方式我都试了一下,转换后的灰度图片效果差不多。然后再令像素的R、G、B分度值都为gray就行了 。
   

public void GrayScale(Bitmap image )
{
    
int width = image.Width - 1;
    
int height = image.Height - 1;

    Color color;
    
for (int i = width; i >= 0;i--)
    
{
    
for (int j = height; j >= 0;j--)
    
{
            
//读取每一个像素
        color = image.GetPixel(i,j);        //计算灰度值
            int gray = (int)(color.R * 0.3 + 
                color.G 
* 0.59 + color.B * 
                
0.11);
      
//int gray = (color.R + color.G + 
                color.B) / 3;
        Color colorResult 
= 
            Color.FromArgb(
255,gray,gray,gray);
        
//设置像素为灰度
            image.SetPixel(i, j, colorResult);
    }
    
    }
    
     原始图片:
    
     灰度图片:
   
posted on 2006-05-24 10:38  gisfeng  阅读(2688)  评论(5)    收藏  举报