3

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

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

因此,如果将灰度/去饱和过滤器作为一个简单的案例,人们会怎么写呢?

4

2 回答 2

5

您必须锁定图像,然后使用内存,直接绕过 SetPixel 方法。 看这里或者更好看这里

例如,您可以将蓝色通道设置为 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.
于 2009-08-18T22:48:38.710 回答
1

为了获得更快的性能,您可能需要查看 WPF 的像素着色器效果实现,它适用于所有 .NET WPF 视觉对象,而不仅仅是图像。

看看一篇文章,解释了这种效果的一些基本实现步骤:

http://bursjootech.blogspot.com/2008/06/grayscale-effect-pixel-shader-effect-in.html

于 2011-02-02T20:44:45.390 回答