c# winform 把彩色图片转换为灰色的图片,变灰,灰度图片,速度很快,safe,unsafe

把彩色图片转换为灰色的图片,直接用.net接口遍历每个像素点转换的效率非常低,800K的图片65万像素我的电脑要用5分钟,而用了unsafe,速度提高了几千倍,同样的图片只用了0.几秒

附一个常用的遍历像素点转换的代码

构造函数

public Tphc()
{
	InitializeComponent();
	this.pictureBox1.ImageLocation = "F:\\黑色头发.jpg";
}


按钮单击事件

private void button3_Click(object sender, EventArgs e)
{
    int Height = this.pictureBox1.Image.Height;
	int Width = this.pictureBox1.Image.Width;
	Bitmap bitmap = new Bitmap(Width, Height);
	Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image;
	Color pixel;
	for (int x = 0; x < Width; x++)
	    for (int y = 0; y < Height; y++)
	    {
	        pixel = MyBitmap.GetPixel(x, y);
	        int r, g, b, Result = 0;
	        r = pixel.R;
	        g = pixel.G;
	        b = pixel.B;
	        //实例程序以加权平均值法产生黑白图像
	        int iType = 2;
	        switch (iType)
	        {
	            case 0://平均值法
	                Result = ((r + g + b) / 3);
	                break;
	            case 1://最大值法
	                Result = r > g ? r : g;
	                Result = Result > b ? Result : b;
	                break;
	            case 2://加权平均值法
	                Result = ((int)(0.7 * r) + (int)(0.2 * g) + (int)(0.1 * b));
	                break;
	        }
	        bitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result));
	    }
	this.pictureBox1.Image = bitmap;
}


黑色头发:http://heisetoufa.iteye.com/

你可能感兴趣的:(C++,c,.net,C#,WinForm)