我知道如何實現它們,但我不知道是應用逐像素轉換像素,還是有另一種方式影響整個圖像,使用單個調用等?在C#中實現Photoshop過濾器#
AFAIK Get.Set Pixel非常慢。我不確定他們是否這樣做。
所以,如果它是灰度/去飽和濾波器作爲一個簡單的情況下,將如何寫它?
我知道如何實現它們,但我不知道是應用逐像素轉換像素,還是有另一種方式影響整個圖像,使用單個調用等?在C#中實現Photoshop過濾器#
AFAIK Get.Set Pixel非常慢。我不確定他們是否這樣做。
所以,如果它是灰度/去飽和濾波器作爲一個簡單的情況下,將如何寫它?
您必須鎖定圖像,然後直接繞過SetPixel方法處理內存。 See here甚至更好 here
對於examle可以將藍色設置爲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-18 22:52:24
也使用這種方法不得不使用不安全的代碼? – 2009-08-18 22:54:31
它將內存鎖定到物理位置,以便.Net內存管理器在垃圾回收期間無法移動它。是的,這使用不安全的代碼,並需要適當的不安全{}部分或編譯器選項。 – 2009-08-18 22:59:28
爲了實現更快的性能,您可能想看看WPF的像素着色器效果的實現,可與所有.NET WPF可視對象一起使用,而不僅僅是圖像。
看看一篇文章,解釋了這樣的效果,一些基本的實現步驟:
http://bursjootech.blogspot.com/2008/06/grayscale-effect-pixel-shader-effect-in.html
謝謝,這是一個很好的例子。出於好奇,你知道所有的PS效果都可以用像素着色器嗎?我對像素着色器不太熟悉,但是AFAIK只是爲了最簡單的效果,比如顏色偏移,灰度,等等。 – 2011-02-02 22:06:13
@Joan Venge現在,通過WPF 4,可以實現PS 3.0效果,這使得編寫非常複雜的效果成爲可能。請查看http://shazzam-tool.com/default.html上的Shazzam Pixel Shader實用程序。下載最新版本並親自體驗一下你可以編寫的效果。 – luvieere 2011-02-03 07:18:39
謝謝你.... – 2011-02-03 17:56:47
如果你知道如何實現它們,我倒要看看你問「我如何實施的Photoshop在C#中過濾器「,並用例子自己回答,主要是因爲我很想知道如何:) – 2009-08-18 22:53:29
將它消失:) – 2009-08-18 22:55:48
http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx或http ://www.codeproject.com/KB/GDI-plus/csharpgraphicfilters11.aspx – McAden 2009-08-18 23:45:50