根據Instagram CEO的說法,Toaster濾鏡是Instagram所有濾鏡中最復雜的濾鏡,這個濾鏡給人一種新奇的紅色烘烤感,很能讓人聯想起這個Toaster單詞的本意呵呵,今天我將用C#實現這個濾鏡,當然我也只是探索,如何逼近它的效果,差異的存在在所難免,大家勿怪哦。
??? 按照之前的說法,還是先使用Photoshop進行模擬,然后根據模擬步驟,進行C#代碼編寫。
首先,看下效果圖:

????????????????????????????????????????????????????????????? ?(a)PS效果圖

?????????????????????????????????????????????????????????????(b)Instagram效果圖

?????????????????????????????????????????????????????? ? (c)C#代碼效果圖
??? 效果怎么樣我說了不算呵呵,下面介紹PS實現步驟:
??? 1,打開測試圖像,命名為圖層Source
??? 2,創建三個模板,這里三個模板我已經給大家提供,在下載包里,當然這三個模板是我根據Instagram變換出來的,大家只需要拿來使用就行了,將三個模板分別命名為a,b,c,如下圖所示:

??? 3,對圖層a執行"混合圖層"---"正片疊底"

??? 4,對圖層b執行"混合圖層"---"濾色":

??? 5,對圖層c執行"混合圖層"---"柔光":

??? 這樣效果圖就出來了,看起來是不是相當簡單呢?
??? 下面我們介紹C#代碼實現:
??? 這里實現的關鍵也就是講三個圖層分別按照相應的圖層混合模式混合起來就可以了,我這里新建了一個ToasterFilter的類,代碼如下:
~~~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace SpecialeffectDemo
{
unsafe class ToasterFilter
{
public ToasterFilter(Bitmap src,Bitmap bg_a,Bitmap bg_b,Bitmap bg_c)
{
this.srcBitmap = src;
this.mapa = bg_a;
this.mapb = bg_b;
this.mapc = bg_c;
}
private Bitmap srcBitmap = null;
private Bitmap mapa = null;
private Bitmap mapb = null;
private Bitmap mapc = null;
public Bitmap Apply()
{
if (srcBitmap != null)
{
Bitmap src = new Bitmap(srcBitmap);
int w = srcBitmap.Width;
int h = srcBitmap.Height;
BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
BitmapData mapaData = mapa.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
BitmapData mapbData = mapb.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
BitmapData mapcData = mapc.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
byte* p = (byte*)srcData.Scan0;
byte* pa = (byte*)mapaData.Scan0;
byte* pb = (byte*)mapbData.Scan0;
byte* pc = (byte*)mapcData.Scan0;
int r = 0, g = 0, b = 0, a = 0, t = 0;
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
b = p[0];
g = p[1];
r = p[2];
b = SpecialEffectClass.ModeMultiplyEffect(b, pa[0]);
g = SpecialEffectClass.ModeMultiplyEffect(g, pa[1]);
r = SpecialEffectClass.ModeMultiplyEffect(r, pa[2]);
b = SpecialEffectClass.ModeFilterColorEffect(b, pb[0]);
g = SpecialEffectClass.ModeFilterColorEffect(g, pb[1]);
r = SpecialEffectClass.ModeFilterColorEffect(r, pb[2]);
a = pc[3];
if (a == 255)//由于模板圖像中存在透明度變化,因此選用32位bgra格式
{
b = SpecialEffectClass.ModeSmoothLightEffect(b, pc[0]);
g = SpecialEffectClass.ModeSmoothLightEffect(g, pc[1]);
r = SpecialEffectClass.ModeSmoothLightEffect(r, pc[2]);
}
else
{
t = SpecialEffectClass.ModeSmoothLightEffect(b, pc[0]);
b = (b * (255 - a) + t * a)/255;
t = SpecialEffectClass.ModeSmoothLightEffect(g, pc[1]);
g = (g * (255 - a) + t * a)/255;
t = SpecialEffectClass.ModeSmoothLightEffect(r, pc[2]);
r = (r * (255 - a) + t * a)/255;
}
p[0] = (byte)b;
p[1] = (byte)g;
p[2] = (byte)r;
p += 4;
pa += 4;
pb += 4;
pc += 4;
}
p += srcData.Stride - w * 4;
pa += mapaData.Stride - w * 4;
pb += mapbData.Stride - w * 4;
pc += mapcData.Stride - w * 4;
}
src.UnlockBits(srcData);
mapa.UnlockBits(mapaData);
mapb.UnlockBits(mapbData);
mapc.UnlockBits(mapcData);
return src;
}
else
{
return null;
}
}
}
}
~~~
注意:由于圖層C是具有不同的透明度的,因此,我們在程序中要使用PixelFormat.Format32bppArgb,而不再是24位;
程序效果圖稍微偏暗,大家可以調整一下亮度即可,最后,放上Demo的下載鏈接,當然,里面有兩個包,一個是Photoshop文件,供大家進行PS實踐檢驗,一個是C#的Demo:[http://download.csdn.net/detail/trent1985/8132433](http://download.csdn.net/detail/trent1985/8132433)
如有問題,聯系我。郵箱:[dongtingyueh@163.com,QQ:13634132112](mailto:dongtingyueh@163.com,QQ:13634132112)
**最后,分享一個專業的圖像處理網站(微像素),里面有很多源代碼下載:**
[http://www.zealpixel.com/portal.php](http://www.zealpixel.com/portal.php)
- 前言
- 序言
- Brannan濾鏡
- 編碼基礎(Photoshop基礎變換的代碼實現)
- Toaster濾鏡
- Hudson濾鏡(Instagram)
- 暴雨濾鏡
- 大雪濾鏡
- 圖像濾鏡實現萬能方法研究
- 大霧效果濾鏡
- 連環畫濾鏡
- 暗調濾鏡
- 懷舊風格濾鏡
- (Nostalgla Filter)老照片濾鏡
- (Punch Filter)交叉沖印濾鏡
- (Lightleaks Filter)漏光濾鏡
- 漫畫濾鏡
- LOMO Filter
- Glow Filter發光濾鏡
- (Instagram)1977濾鏡
- (Sketch Filter)素描濾鏡
- 水彩畫濾鏡
- 圖像光照效果濾鏡
- Oilpaint油畫濾鏡
- Swirl濾鏡
- Wave濾鏡
- 球面(Spherize)濾鏡
- 擠壓(Pinch)濾鏡
- 旋轉模糊濾鏡
- 霓虹、浮雕、木刻濾鏡
- 圖像濾鏡暈影調節算法研究
- PS平均(濾鏡-模糊-平均)效果
- Photoshop實現Instagram Amaro濾鏡特效
- Photoshop實現Instagram之Nashville濾鏡
- Photoshop實現Instagram之Sierra濾鏡
- Photoshop實現Instagram之Mayfair濾鏡效果
- ZPhotoEngine超級算法庫
- 樂高像素拼圖特效
- 樂高像素拼圖特效濾鏡的代碼實現
- 保留細節的磨皮濾鏡之PS實現
- 保留細節的磨皮之C#程序實現
- 流行藝術風濾鏡特效PS實現
- PS圖層混合模式之明度模式