日期:2014-05-17  浏览次数:20951 次

C#图片转换为 灰度位图
如何将普通的图片转换为灰度位图呢?在网上搜过些例子 但是转换后图像都变了!

------解决方案--------------------
这个嘛,自己可以写个方法的,但是,在C#里面处理图片,建议在unsafe下面用指针,这样的话,运行的速度很快,否则,你处理大点的图片,你会很纠结的,当然,要先你的项目里面,设置,允许不安全代码...

//打开图片,并保存为位图
Bitmap thismap= (Bitmap)Image.FromFile("你的图片文件名");

Rectangle rect = new Rectangle(0, 0, thisMap.Width, thisMap.Height);
                BitmapData bmpData = thisMap.LockBits(rect, ImageLockMode.ReadWrite, thisMap.PixelFormat);
                byte temp = 0;
                unsafe
                {
                    //运用指针来处理图片
                    byte* ptr = (byte*)(bmpData.Scan0);
                    for (int i = 0; i < bmpData.Height; i++)
                    {
                        for (int j = 0; j < bmpData.Width; j++)
                        {
                            temp = (byte)(0.299 * ptr[2] + 0.587 * ptr[1] + 0.114 * ptr[0]);//灰度化公式,方法大致有三种,这里用的是加权平均法
                            ptr[0] = ptr[1] = ptr[2] = temp;
                            ptr += 4;//这里的4,是指每个像素的字节数
                        }
                        ptr += bmpData.Stride - bmpData.Width * 4;//偏移量
                    }
                }
                thisMap.UnlockBits(bmpData);
      &