<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                (Nostalgla Filter)老照片濾鏡 Nostalgla Filter主要是通過算法來模擬一種復古,陳舊的照片風格,以此來達到新照片顯示老照片的效果。目前這個算法有很多,本文在這里介紹一種更逼真,效率更高的新算法: 1,老照片一般都具有泛黃的紙張特征,這一點,我們構建一張暗黃色的地板圖層A:RGB(200,120,10); 2,老照片還具有一些裂紋特征,當然,并非所有老照片都這樣,這里添加裂紋特征,更形象更逼真,因此,我們這里可以使用PS構建一張裂紋模板B,如下圖所示: [![](https://box.kancloud.cn/2016-01-05_568b3322250df.png)](http://www.zealpixel.com/data/attachment/portal/201507/29/101042sltzpn3myzta3yty.png) 3,將原始照片C進行灰度化處理得到灰度圖D,這里可以使用最簡單的灰度公式: Gray = (R + G + B) / 3; 4,將D與A進行柔光操作,得到圖E,柔光算法如下: ~~~ int ModeSmoothLight(int basePixel, int mixPixel) { int res = 0; res = mixPixel > 128 ? ((int)((float)basePixel + ((float)mixPixel + (float)mixPixel - 255.0f) * ((Math.Sqrt((float)basePixel / 255.0f)) * 255.0f - (float)basePixel) / 255.0f)) : ((int)((float)basePixel + ((float)mixPixel + (float)mixPixel - 255.0f) * ((float)basePixel - (float)basePixel * (float)basePixel / 255.0f) / 255.0f)); return Math.Min(255, Math.Max(0, res)); } ~~~ 5,將E與B進行柔光操作得到最后的效果圖F; 以上就是老照片濾鏡的算法實現了,算法比較簡單,但是效果很不錯! 核心代碼如下: ~~~ private Bitmap NostalglaFilterProcess(Bitmap src,Bitmap mask) { Bitmap dst = new Bitmap(src); int w = dst.Width; int h = dst.Height; BitmapData maskData = mask.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); BitmapData srcData = dst.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); byte* p = (byte*)srcData.Scan0; byte* pMask = (byte*)maskData.Scan0; int offset = srcData.Stride - w * 4; int b = 10, g = 130, r = 200, gray = 0; for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { gray = (p[0] + p[1] + p[2]) / 3; b = ModeSmoothLight(gray, b); g = ModeSmoothLight(gray, g); r = ModeSmoothLight(gray, r); p[0] = (byte)ModeSmoothLight(b,pMask[0]); p[1] = (byte)ModeSmoothLight(g, pMask[1]); p[2] = (byte)ModeSmoothLight(r, pMask[2]); p += 4; pMask += 4; } p += offset; pMask += offset; } dst.UnlockBits(srcData); mask.UnlockBits(maskData); return dst; } ~~~ 效果圖如下: [![](https://box.kancloud.cn/2016-01-05_568b33227deb7.jpg)](http://www.zealpixel.com/data/attachment/portal/201507/29/101414z8vjqro79djycfix.jpg) 原圖 [![](https://box.kancloud.cn/2016-01-05_568b332296040.png)](http://www.zealpixel.com/data/attachment/portal/201507/29/101413ozht0hqlsu94yddu.png) 老照片濾鏡效果圖 最后放上一個完整C#程序DEMO的下載地址:[http://www.zealpixel.com/thread-69-1-1.html](http://www.zealpixel.com/thread-69-1-1.html)
                  <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>

                              哎呀哎呀视频在线观看