<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國際加速解決方案。 廣告
                ## 本文對濾鏡中常見的暈影,暈角效果的實現做了研究,具體如下: ## 1?暈影調整算法 所謂暈影就是給圖像四個角添加暗影效果,這暗影向圖像中心逐漸淡化。我們使用如下公式來實現: 假設圖像寬度高度分別為w,h: ~~~ double d = Math.Sqrt((i - w / 2) * (i - w / 2) + (j - h / 2) * (j - h / 2)); double dmax = 1.0 / Math.Sqrt(w * w / 4 + h * h / 4); double lum = 0.75 / (1.0 + Math.Exp((d * dmax - cRadius) * cGradient)) + cLight; //eg:double lum = 0.75 / (1.0 + Math.Exp((d * dmax - 0.85) * 5)) + 0.35; r = (int)((double)r * lum); g = (int)((double)g * lum); b = (int)((double)b * lum); ~~~ 注釋: cRadius?(cRadius=0.73)這個參數控制暈影的半徑,值越大,半徑越大; cLight?(cLight=0.25)控制中心圓形區域內的像素亮度,值越大,圖像越亮; cGradient?(cGradient=20)這個參數控制中心區域與暈影過渡部分的梯度,值越小,過渡越自然,越不明顯; 上述算法實現的是圓形暈影。 有了暈影圖像之后,我們采用K比例混合算法來實現暈影強度的可調性,假設暈影圖像為S(n,m),原圖為X(n,m),效果圖為Y(n,m),暈影強度因子為K,K屬于[0,1],混合公式如下: ????????????????????Y(n,m)=K*X(n,m)+(1-K)*S(n,m) 這樣就實現了暈影效果從無到有的調節過程。 ## 2?暈影調節快速算法 暈影調節的快速算法主要是改進暈影圖像的生成過程。我們可以按照自己的需求使用PS制作出一張暈影效果圖,來代替算法生成暈影圖像的過程,這樣就可以節省算法生成的時間了,之后的調節過程不變。 當然,這個算法的缺點就是暈影的半徑,過渡程度和亮度無法調整。 目前,這里給出Instagram里使用的暈角模板: [![](https://box.kancloud.cn/2016-01-05_568b33284f3ba.png)](http://www.zealpixel.com/data/attachment/portal/201509/26/081917r0qevid2d1q3e3tt.png) ????在Instagram中,是使用這個模板與目標圖像執行“柔光”混合圖層算法,得到暈角效果的,然后使用1中的K比例混合算法,來快速調節。 最后給出android 中C代碼,可以直接使用。 ## 附錄?Android?C?Code?with?RGB565 ~~~ void THaloEffect(int* srcData, int width, int height) { int gray = 0, green = 0, blue = 0, red = 0, i = 0, j = 0, alpha = 0xFF << 24; for(j = 0; j < height; j++) { for(i = 0; i < width; i++) { gray = srcData[i + j * width]; red = ((gray >> 16) & 0xFF); green = ((gray >> 8) & 0xFF); blue = (gray & 0xFF); double d = sqrt((i - width / 2) * (i - width / 2) + (j - height / 2) * (j - height / 2)); double dmax = 1.0 / sqrt(width * width / 4 + height * height / 4); //double lum = 0.75 / (1.0 + Math.Exp((d * dmax - 0.73) * 20)) + 0.25; double lum = 0.75 / (1.0 + exp((d * dmax - 0.73) * 20)) + 0.25; red = (int)((double)red * lum); red = CheckRange(red); green = (int)((double)green * lum); green = CheckRange(green); blue = (int)((double)blue * lum); blue = CheckRange(blue); srcData[i + j * width] = alpha | (red << 16) | (green << 8) | blue; } } }; void THaloEffect_F(int* srcData, int* mask, int width, int height, int ratio) { int gray = 0,green = 0,blue = 0,red = 0,i = 0, mRed = 0, mGreen = 0, mBlue = 0, alpha = 0xFF << 24; int length = width * height; for (i = 0; i < length; i++) { gray = srcData[i]; red = ((gray >> 16) & 0xFF); green = ((gray >> 8) & 0xFF); blue = (gray & 0xFF); gray = mask[i]; mRed = ((gray >> 16) & 0xFF); mGreen = ((gray >> 8) & 0xFF); mBlue = (gray & 0xFF); mRed = ModeSmoothLight(red, mRed); mGreen = ModeSmoothLight(green, mGreen); mBlue = ModeSmoothLight(blue, mBlue); red = (mRed * ratio + (100 - ratio) * red) / 100; green = (mGreen * ratio + (100 - ratio) * green) / 100; blue = (mBlue * ratio + (100 - ratio) * blue) / 100; srcData[i] = alpha | (red << 16) | (green << 8) | blue; } }; ~~~
                  <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>

                              哎呀哎呀视频在线观看