Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言实现Photoshop过滤器#_C#_.net_Image_Bitmap_Photoshop - Fatal编程技术网

C# 用C语言实现Photoshop过滤器#

C# 用C语言实现Photoshop过滤器#,c#,.net,image,bitmap,photoshop,C#,.net,Image,Bitmap,Photoshop,我知道如何实现它们,但我不知道是逐像素应用变换,还是有其他方法影响整个图像,使用单个调用,等等 AFAIK Get。设置像素非常慢。我不确定他们是不是这样做的 因此,如果是灰度/去饱和过滤器作为一个简单的例子,如何编写它?您必须锁定图像,然后使用内存,直接绕过SetPixel方法。 甚至更好 例如,您可以将蓝色通道设置为255,如下所示: BitmapData bmd=bm.LockBits(new Rectangle(0, 0, 10, 10), System.Drawing.Imagi

我知道如何实现它们,但我不知道是逐像素应用变换,还是有其他方法影响整个图像,使用单个调用,等等

AFAIK Get。设置像素非常慢。我不确定他们是不是这样做的


因此,如果是灰度/去饱和过滤器作为一个简单的例子,如何编写它?

您必须锁定图像,然后使用内存,直接绕过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.
BitmapData bmd=bm.LockBits(新矩形(0,0,10,10),System.Drawing.ImageLockMode.ReadOnly,bm.PixelFormat);
int PixelSize=4;

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

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


谢谢,我不知道锁定。锁定到底是做什么的?链接似乎没有详细说明说明。可能方法名称不是很有描述性?它将内存锁定到一个物理位置,以便.Net内存管理器在垃圾收集期间不能移动内存。是的,这使用了不安全的代码,需要适当的配置te不安全{}节或编译器选项。@Joan:使用LockBits确实需要不安全的关键字。这通常一点也不令人担心,但某些Windows用户可能在禁止不安全代码的安全策略下运行,因此你的应用程序无法工作。我本人从未遇到过这个问题,但它的威胁使我根本不使用位图(如果你知道如何实现它们,我希望看到你问“我如何在C#中实现Photoshop过滤器”,并用例子自己回答,主要是因为我想知道如何实现:)或者@JoanVenge你也实现了photoshop的puppet filter吗?如果是,请告诉我如何实现。谢谢,这是一个很好的例子。出于好奇,你知道像素着色器是否可以实现所有PS效果吗?我对像素着色器不太熟悉,但我相信它只适用于最简单的效果,如颜色变换、灰度等@Joan Veng现在,使用WPF 4,可以实现PS 3.0效果,这使得编写非常复杂的效果成为可能。请查看下载最新版本的Shazzam Pixel Shader实用程序,并亲自查看可以编写的效果类型。