using System; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; private void Form1_Load(object sender, EventArgs e) { Bitmap bmp = new Bitmap(@"C:/kids.jpg"); pictureBox1.Image = bmp; Bitmap bmp2 = bmp.Clone(new Rectangle(0, 0, bmp.Width, bmp.Height), bmp.PixelFormat); BitmapData bmpData = bmp2.LockBits(new Rectangle(0, 0, bmp2.Width, bmp2.Height), ImageLockMode.ReadWrite, bmp2.PixelFormat); int[] pixels = new int[bmp2.Width * bmp2.Height]; IntPtr scan0 = bmpData.Scan0; Marshal.Copy(scan0, pixels, 0, pixels.Length); int GrayValue = 0; for (int i = 0; i < pixels.Length;i++ ) { GrayValue = GetGrayNumColor(Color.FromArgb(pixels[i])); pixels[i]=(byte)(Color.FromArgb(GrayValue, GrayValue, GrayValue)).ToArgb(); } bmp2.UnlockBits(bmpData); pictureBox2.Image = bmp2; } /// <summary> /// 根据RGB,计算灰度值 /// </summary> /// <param name="posClr">Color值</param> /// <returns>灰度值,整型</returns> private int GetGrayNumColor(System.Drawing.Color posClr) { return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16; }