在C#中实现Photoshop过滤器

时间:2009-08-18 22:41:53

标签: c# .net image bitmap photoshop

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

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

因此,如果将灰度/去饱和滤波器作为一个简单的情况,那么如何编写呢?

2 个答案:

答案 0 :(得分:5)

您必须锁定图像,然后直接绕过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.

答案 1 :(得分:1)

为了获得更快的性能,您可能需要查看WPF的Pixel Shader Effects实现,该实现适用于所有.NET WPF可视对象,而不仅仅是图像。

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

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