自從上一篇部落格寫完之後,到現在已經有段時間了,這段時間不是不想接着寫,隻是想做的更好了在寫出來給大家看呵呵。
今天,我将給大家介紹制作圖像濾鏡的基礎,也就是PS中的基本指令如何用代碼實作,這裡包括各種混合圖層,去色指令,亮度對比度調整,飽和度調整以及曲線調整等,這些指令都是最基礎的,如果我們掌握了這些知識,那麼,一些複雜的濾鏡也就有穩定的根基了。
1,混合圖層
PS中,混合圖層是制作濾鏡的必需品,他包括了正常模式,溶解模式,變暗模式,正片疊底,顔色加深,線性加深,深色模式,變亮模式,濾色模式,顔色減淡,線性減淡,淺色模式,疊加模式,柔光模式,強光模式,亮光模式,線性光,點光,實色混合,插值模式,排除模式,減去模式,劃分模式,色相,飽和度,顔色,明度等。
這些混合模式的原理及公示計算如下(來自網絡總結):
正常模式:混合色*不透明度+(100%-混合色不透明度)*基色
溶解模式:溶解模式下混合色的不透明度及填充都是100%的話,我們就看不到基色圖層。降低混合色圖層的不透明度後,我們就會發現結果色中出現了很多細小的顆粒。這些顆粒會随着混合色的不透明度變化。不透明度越低混合色圖層就被溶解的越多。剩下的部分就越少。不透明度越高混合色圖層被溶解的部分就越少,剩下的部分就越多,結果色就越接近混合色。
變暗模式:變暗混合模式下,她會把混合色與基色進行對比,分别選擇R,G,B三組數值中最小的數值,也就是最暗的顔色作為結果色的數值。這樣整個畫面會變得更暗,如果是彩色圖像,顔色也會發生很大的改變。(位置互換不發生變化)
正片疊底:正片疊底混合原理:她是按照混合色與基色中的各R,G,B值計算,計算公式:結果色R=混合色R
* 基色R / 255,G值與B值同樣的方法計算。最後得到的R,G,B值就是結果色的顔色。由于各通道的最大值是255,是以結果色的數值比混合色及基色的數值都要小,也就是結果色要暗。(位置互換不發生變化)
顔色加深:顔色加深可以快速增加圖檔的暗部。她的計算公式:結果色 =(基色
+ 混合色 - 255)* 255 /混合色。其中(基色 +混合色
- 255)如果出現負數就直接歸0。是以在基色與混合色都較暗的時候都是直接變成黑色的。這樣結果色的暗部就會增加。整體效果看上去對比較為強烈。
線性加深:線性加深的計算公式是:結果色 =基色 +混合色
- 255,如果基色 +混合色的數值小于255,結果色就為0。由這個公式可以看出,畫面暗部會直接變成黑色。是以畫面整體會更暗。白色與基色混合得到基色,黑色與基色混合得到黑色。(位置互換不發生變化)
深色模式:深色混合模式比較好了解。它是通過計算混合色與基色的所有通道的數值,然後選擇數值較小的作為結果色。是以結果色隻跟混合色或基色相同,不會産生出另外的顔色。白色與基色混合色得到基色,黑色與基色混合得到黑色。深色模式中,混合色與基色的數值是固定的,我們颠倒位置後,混合色出來的結果色是沒有變化的。
變亮模式:變亮模式跟變暗模式是相對的,她是通過混合色與基色的相關數值進行比較,選擇較大的數值作為結果色。是以結果色會更亮,同時顔色也會變化。(位置互換不發生變化)
濾色模式:濾色模式與正片疊底模式相對。她的計算公式是用:255 -混合色的補色
* 基色補色 / 255。得到的資料會比混合及基色更大,是以結果色會更亮。從計算公式也可以看出基色或混合色任何一項為255也就是白色,結果色數值就是255為白色。任何一項數值為0,也就是為黑色的話,結果色就跟數值不為0的一緻。
顔色減淡:顔色減淡是通過混合色及基色的各通道顔色值進行對比,減少二者的對比度使基色的變亮來反映混合色。
她的計算公式:結果色 = 基色 + (混合色 * 基色) / (255 - 混合色)。混合色為黑色,結果色就等于基色,混合色為白色結果色就為白色。基色為黑色結果色就為黑色。
線性減淡:線性減淡是通過檢視每個通道的顔色資訊,并通過增加亮度使基色變亮以反映混合色。她的計算公式:結果色
= 基色 +混合色,其中基色與混合色的數值大于255,系統就預設為最大值也就是255。
由公式可以分析出混合色為黑色結果色就等于基色,混合色為白色結果色就為白色。基色也一樣。我們颠倒混合色及基色的位置,結果色也不會變化。(位置互換不發生變化)
淺色模式:淺色模式比較好了解:她是通過計算混合色與基色所有通道的數值總和,哪個數值大就選為結果色。是以結果色隻能在混合色與基色中選擇,不會産生第三種顔色。與深色模式剛好相反。
疊加:疊加模式比較特别,她是通過分析基色個通道的數值,對顔色進行正片疊加或濾色混合,結果色保留基色的明暗對比。是以結果色以基色為主導。
計算公式:
基色 < = 128:結果色 =混合色
*基色 / 128;基色 > 128:結果色
= 255 - (255 -混合色)* (255 -基色)
/ 128。
從公式可以看出,結果色會根據基色的顔色數值選擇不同的計算公式。
柔光模式:柔光模式是較為常用的模式,她是根據混合色的通道數值選擇不同的公式計算混合色。數值大于128的時候,結果色就比基色稍亮;數值小于或等于128,結果色就比基色稍暗。柔光模式是以基色為主導,混合色隻相應改變局部明暗。其中混合色為黑色,結果色不會為黑色,隻比結果色稍暗,混合色為中性色,結果色跟基色一樣。
計算公式:
混合色 <=128:結果色 =基色
+ (2 *混合色 - 255) * (基色 -基色
*基色 / 255) / 255;
混合色 >128:結果色
= 基色 + (2 *混合色 - 255) * (Sqrt(基色/255)*255
-基色)/255。
強光模式:強光模式跟疊加模式十分類似,隻是在計算的時候需要通過混合色來控制,混合色的數值小于或等于128的時候,顔色會變暗;混合色的數值大于128的時候,顔色會變亮。混合色為白色,結果色就為白色;混合色為黑色,結果為黑色。混合色起到主導作用。
混合色 <= 128:結果色 =混合色
*基色 / 128;
混合色 > 128:結果色 = 255 -(255
-混合色) * (255 -基色) / 128.
亮光模式:亮光模式是通過增加或減少對比度是顔色變暗或變亮,具體取決于混合色的數值。混合色比中性灰色暗,結果色就相應的變暗,混合色比中性灰色亮,結果色就相應的變亮。有點類似顔色加深或顔色減淡。
A---基色;B—混合色
C=A-(255-A)*(255-2B)/2B 當混合色>128時
C=A+[A*(2B-255)]/[255-(2B-255)
線性光:線性光:通過減少或增加亮度,來使顔色加深或減淡。具體取決于混合色的數值。混合色數值比中性灰色暗的時候進行相應的加深混合;混合色的數值比中性灰色亮的時候進行減淡混合。這裡的加深及減淡時線性加深或線性減淡。
計算公式:結果色 = 2 *混合色
+基色 -255。數值大于255取255。
點光:點光模式:她會根據混合色的顔色數值替換相應的顔色。如果混合色數值小于中性灰色,那麼就替換比混合色亮的像素;相反混合色的數值大于中性灰色,則替換比混合色暗的像素。是以混合出來的顔色對比較大。
基色 < 2 *混合色 - 255:結果色
= 2 *混合色 - 255;
2 * 混合色 - 255 <基色
< 2 *混合色:結果色 =基色;
基色 > 2 *混合色:結果色 = 2 *混合色。
實色混合:實色混合是把混合色顔色中的紅、綠、藍通道數值,添加到基色的RGB值中。結果色的R、G、B通道的數值隻能是255或0。是以結構色隻有一下八種可能:紅、綠、藍、黃、青、洋紅、白、黑。由此看以看出結果色是非常純的顔色。
混合色+ 基色 < 255:結果色 = 0 ;混合色 + 基色 >= 255:結果色= 255。
內插補點模式:內插補點模式:檢視每個通道的數值,用基色減去混合色或用混合色減去基色。具體取決于混合色與基色那個通道的數值更大。白色與任何顔色混合得到反相色,黑色與任何顔色混合顔色不變。
結果色 =絕對值(混合色 -基色)
排除模式:排除模式是跟內插補點模式非常類似的混合模式,隻是排除模式的結果色對比度沒有內插補點模式強。白色與基色混合得到基色補色,黑色與基色混合得到基色。
結果色 = (混合色 +基色)
-混合色 *基色 / 128。
減去模式:減去模式:檢視各通道的顔色資訊,并從基色中減去混合色。如果出現負數就剪切為零。與基色相同的顔色混合得到黑色;白色與基色混合得到黑色;黑色與基色混合得到基色。
結果色 =基色 -混合色。
劃分模式:劃分模式:超看每個通道的顔色資訊,并用基色分割混合色。基色數值大于或等于混合色數值,混合出的顔色為白色。基色數值小于混合色,結果色比基色更暗。是以結果色對比非常強。白色與基色混合得到基色,黑色與基色混合得到白色。
結果色 = (基色 /混合色)
* 255。
色相:色相混合模式:結果色保留混合色的色相,飽和度及明度數值保留明度數值。這裡用到的色相、飽和度、明度也是一種顔色模式,也稱作:HSB模式。色相代表顔色的顔色相貌,也就是我們看到的紅、綠、藍等;飽和度是顔色的飽和程度,也就是鮮豔度;明度是顔色的明暗程度。其中黑色、灰色、白色是沒有顔色和飽和度的,也就是相關數值為0。
飽和度模式:飽和度模式是用混合色的飽和度以及基色的色相和明度建立結果色。我們都知道飽和度隻控制顔色的鮮豔程度,是以混合色隻改變圖檔的鮮豔度,不能影響顔色。黑、白、灰除外,因為這些顔色的飽和度為0,混合後隻能産生一種灰色效果。
顔色模式:顔色模式是用混合色的色相,飽和度以及基色的明度建立結果色。這種模式下混合色控制真個畫面的顔色,是黑白圖檔上色的絕佳模式,因為這種模式下會保留基色圖檔也就是黑白圖檔的明度度。黑、白、會與基色混合會産生相同的灰色效果,因為這三種顔色的色相,飽和度都是0。
明度模式:明度混合模式是利用混合色的明度以及基色的色相與飽和度建立結果色。她跟顔色模式剛好相反,是以混合色圖檔隻能影響圖檔的明暗度,不能對基色的顔色産生影響,黑、白、灰除外。黑色與基色混合得到黑色;白色與基色混合得到白色;灰色與基色混合得到明暗不同的基色。
2,去色指令
PS裡的去色指令:每個像素R、G、B三個值中最大值和最小值和的一半,作為最後灰階值輸出;
3,亮度對比度指令
4,飽和度指令
5,曲線指令
以上是我們隻做一款優秀濾鏡比不可少的知識,言歸正傳,今天我主要給大家提供一個C#/C的DEMO,代碼中實作了以上基本功能,大家可以了解知識之後自己編碼,也可以直接使用我的DEMO中的庫(SpecialEffect.dll),或者是C#的SpecialEffectClass.cs,簡單放上一些調用代碼:
DEMO的界面如下:

最後,分享一個專業的圖像處理網站(微像素),裡面有很多源代碼下載下傳:
<a target="_blank" href="http://www.zealpixel.com/portal.php">http://www.zealpixel.com/portal.php</a>