我知道如何实现它们,但是我不知道是逐个像素应用转换还是使用另一种调用等方法来影响整个图像?

AFAIK Get.Set像素非常慢。我不确定他们是否这样做。

因此,如果它是一种简单的灰度/去饱和滤镜,该怎么写呢?

最佳答案

您必须锁定图像,然后直接绕过SetPixel方法使用内存。
See here 甚至更好的 here

例如,您可以将蓝色设置为255,如下所示

   BitmapData bmd=bm.LockBits(new Rectangle(0, 0, 10, 10), System.Drawing.Imaging.ImageLockMode.ReadOnly, bm.PixelFormat);
      int PixelSize=4;
      for(int y=0; y<bmd.Height; y++)
      {
        byte* row=(byte *)bmd.Scan0+(y*bmd.Stride);
        for(int x=0; x<bmd.Width; x++)
        {
          row[x*PixelSize]=255;
        }
      } // it is copied from the last provided link.

09-27 04:26