<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                根據Instagram CEO的說法,Toaster濾鏡是Instagram所有濾鏡中最復雜的濾鏡,這個濾鏡給人一種新奇的紅色烘烤感,很能讓人聯想起這個Toaster單詞的本意呵呵,今天我將用C#實現這個濾鏡,當然我也只是探索,如何逼近它的效果,差異的存在在所難免,大家勿怪哦。 ??? 按照之前的說法,還是先使用Photoshop進行模擬,然后根據模擬步驟,進行C#代碼編寫。 首先,看下效果圖: ![](https://box.kancloud.cn/2016-01-05_568b331b52a8e.jpg) ????????????????????????????????????????????????????????????? ?(a)PS效果圖 ![](https://box.kancloud.cn/2016-01-05_568b331b84444.jpg) ?????????????????????????????????????????????????????????????(b)Instagram效果圖 ![](https://box.kancloud.cn/2016-01-05_568b331bab1d8.jpg) ?????????????????????????????????????????????????????? ? (c)C#代碼效果圖 ??? 效果怎么樣我說了不算呵呵,下面介紹PS實現步驟: ??? 1,打開測試圖像,命名為圖層Source ??? 2,創建三個模板,這里三個模板我已經給大家提供,在下載包里,當然這三個模板是我根據Instagram變換出來的,大家只需要拿來使用就行了,將三個模板分別命名為a,b,c,如下圖所示: ![](https://box.kancloud.cn/2016-01-05_568b331c006e8.jpg) ??? 3,對圖層a執行"混合圖層"---"正片疊底" ![](https://box.kancloud.cn/2016-01-05_568b331c2f1b0.jpg) ??? 4,對圖層b執行"混合圖層"---"濾色": ![](https://box.kancloud.cn/2016-01-05_568b331c592a7.jpg) ??? 5,對圖層c執行"混合圖層"---"柔光": ![](https://box.kancloud.cn/2016-01-05_568b331c8629d.jpg) ??? 這樣效果圖就出來了,看起來是不是相當簡單呢? ??? 下面我們介紹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)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看