我知道如何实现它们,但我不知道是逐像素应用转换还是有其他方法可以使用单个调用等方式影响整个图像?
据我所知,Get.Set Pixel非常慢。我不确定他们是否是这样做的。
因此,如果将灰度/去饱和滤镜作为简单情况,该如何编写代码呢?
据我所知,Get.Set Pixel非常慢。我不确定他们是否是这样做的。
因此,如果将灰度/去饱和滤镜作为简单情况,该如何编写代码呢?
您需要锁定图像,然后直接绕过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.
http://bursjootech.blogspot.com/2008/06/grayscale-effect-pixel-shader-effect-in.html