在C#中更快地反转图像

我正在使用WinForms。 我的表格中有一个图片框。 当我在图片框中打开图片时,我可以通过点击按钮来回反转颜色,但我的代码非常慢。 如何提高性能。

private void Button1_Click(object sender, System.EventArgs e) { Bitmap pic = new Bitmap(PictureBox1.Image); for (int y = 0; (y <= (pic.Height - 1)); y++) { for (int x = 0; (x <= (pic.Width - 1)); x++) { Color inv = pic.GetPixel(x, y); inv = Color.FromArgb(255, (255 - inv.R), (255 - inv.G), (255 - inv.B)); pic.SetPixel(x, y, inv); PictureBox1.Image = pic; } } } 

每次更改像素时都要设置控件的图片,这会导致控件重绘自己。 等到你完成图像:

 Bitmap pic = new Bitmap(PictureBox1.Image); for (int y = 0; (y <= (pic.Height - 1)); y++) { for (int x = 0; (x <= (pic.Width - 1)); x++) { Color inv = pic.GetPixel(x, y); inv = Color.FromArgb(255, (255 - inv.R), (255 - inv.G), (255 - inv.B)); pic.SetPixel(x, y, inv); } } PictureBox1.Image = pic; 

它对我有用……

  private Image InvertingImage(Image source) { //create a blank bitmap the same size as original Bitmap newBitmap = new Bitmap(source.Width, source.Height); //get a graphics object from the new image Graphics g = Graphics.FromImage(newBitmap); // create the negative color matrix ColorMatrix colorMatrix = new ColorMatrix(new float[][] { new float[] {-1, 0, 0, 0, 0}, new float[] {0, -1, 0, 0, 0}, new float[] {0, 0, -1, 0, 0}, new float[] {0, 0, 0, 1, 0}, new float[] {1, 1, 1, 0, 1} }); // create some image attributes ImageAttributes attributes = new ImageAttributes(); attributes.SetColorMatrix(colorMatrix); g.DrawImage(source, new Rectangle(0, 0, source.Width, source.Height), 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); //dispose the Graphics object g.Dispose(); return newBitmap; }