日期:2014-05-18  浏览次数:20773 次

关于图像处理的方法(内存法)
if(curBitmap !=null)
  {
  Rectangle rect = new Rectangle(0,0,curBitmap.Width,curBitmap.Height);
  BitmapData bmpdata = curBitmap.LockBits(rect, ImageLockMode.ReadWrite,curBitmap.PixelFormat);
  IntPtr ptr = bmpdata.Scan0;
  int bytes = curBitmap.Width * curBitmap.Height * 3;
  byte [] rgbValues=new byte [bytes];
  System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
  double colorTemp = 0;
  for (int i = 0; i < rgbValues.Length;i=i+3 )
  {
  colorTemp = rgbValues[i + 2] * 0.299 + rgbValues[i + 1] * 0.587 + rgbValues[i] * 0.114;//为什么不是是rgbvalues[i]*0.299+rgbvalues[i+1]*0.587+rgbvalues[i+2]*0.114
  rgbValues[i] = rgbValues[i + 1] = rgbValues[i + 2] = (byte)colorTemp;
  }
  System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
  curBitmap.UnlockBits(bmpdata);
  Invalidate();
  }


------解决方案--------------------
像素在内存里是B、G、R顺序保存的。。
------解决方案--------------------
探讨

像素在内存里是B、G、R顺序保存的。。