圖像濾鏡藝術---擠壓(Pinch)濾鏡

Pinch濾鏡
Pinch濾鏡是通過坐標變換來實現以某個點(cenX,cenY)爲中心,某個半徑R內圖像向其擠壓變形的效果。實現這個濾鏡的算法很多,主要是數學公式的不同,大家可以自行設計,這裏給個代碼示例,大家可以直接使用。
代碼如下:
//
        /// <summary>
        /// Pinch Filter
        /// </summary>
        /// <param name="src">Source image.</param>
        /// <param name="cenX">The X position of sun.</param>
        /// <param name="cenY">The Y position of sun.</param>
        /// <returns>The result image.</returns>
        private Bitmap PinchFilterProcess(Bitmap srcBitmap, int cenX, int cenY)
        {
            Bitmap a = new Bitmap(srcBitmap);
            int w = a.Width;
            int h = a.Height;
            int radius = 0;
            Bitmap dst = new Bitmap(w, h);
            System.Drawing.Imaging.BitmapData srcData = a.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            System.Drawing.Imaging.BitmapData dstData = dst.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            unsafe
            {
                byte* pIn = (byte*)srcData.Scan0.ToPointer();
                byte* pOut = (byte*)dstData.Scan0.ToPointer();
                byte* p = null;
                int sWidth = srcData.Stride;
                int stride = sWidth - w * 4;
                int offsetX = 0, offsetY = 0;
                int newX = 0, newY = 0;
                double radian = 0,degree = 10;
                for (int y = 0; y < h; y++)
                {
                    for (int x = 0; x < w; x++)
                    {
                        offsetX = x - cenX;
                        offsetY = y - cenY;
                        radian = Math.Atan2(offsetY, offsetX);
                        radius = (int)(Math.Sqrt(offsetX * offsetX + offsetY * offsetY));
                        radius = (int)(Math.Sqrt(radius) * degree);
                        newX = (int)(radius * Math.Cos(radian)) + cenX;
                        newY = (int)(radius * Math.Sin(radian)) + cenY;
                        newX = Math.Min(w - 1, Math.Max(0, newX));
                        newY = Math.Min(h - 1, Math.Max(0, newY));
                        p = pIn + newY * srcData.Stride + newX * 4;
                        pOut[0] = (byte)p[0];
                        pOut[1] = (byte)p[1];
                        pOut[2] = (byte)p[2];
                        pOut[3] = (byte)255;                     
                        pOut += 4;
                    }
                    pOut += stride;
                }
                a.UnlockBits(srcData);
                dst.UnlockBits(dstData);
            }
            return dst;

        }
效果圖如下:

圖像濾鏡藝術---擠壓(Pinch)濾鏡

原圖

圖像濾鏡藝術---擠壓(Pinch)濾鏡

Pinch濾鏡效果圖

最後放上一個完整的C#版程序Demo給大家下載使用:http://www.zealpixel.com/forum.php?mod=viewthread&tid=55&extra=page%3D1

更多相關文章
  • 圖像濾鏡藝術---(Sketch Filter)素描濾鏡
    (Sketch Filter)素描濾鏡 素描濾鏡的實現方法比較簡單,這裏我們直接寫出算法過程如下: 1, 原圖 素描濾鏡效果圖 最後放上完整C#/C程序DEMO下載連接:http://www.zealpixel.com/thread-64-1-1.html
  • 圖像濾鏡藝術---旋轉模糊濾鏡
    本文介紹一種旋轉模糊濾鏡的實現算法. 旋轉模糊主要特點是:整張圖像圍繞一個中心點做旋轉變換,同時有個控制旋轉程度的變量和一個控制模糊程度的變量,來完成這個效果.圖像中距離中心點越近,旋轉和模糊的程度都越小,反之,越大.假設中心點O坐標爲(cenX,cenY),當前點位置爲P(x,y):1,PO距離D ...
  • 圖像濾鏡藝術---Oilpaint油畫濾鏡
     Oilpaint油畫濾鏡    圖像油畫效果實際上是將圖像邊緣産生一種朦胧,霧化的效果,同時,將一定的邊緣模糊化,這樣圖像整體上看去像素與像素之間就像霧一樣隨機呈現. 算法過程如下: 假設當前像素爲P(x,y),他的隨機位置爲Pd(dx,dy),那麽算法公式如下: 其中,K(v)爲最大值不大于v的 ...
  • 圖像濾鏡藝術---圖像濾鏡暈影調節算法研究
    本文對濾鏡中常見的暈影,暈角效果的實現做了研究,具體如下:1 暈影調整算法所謂暈影就是給圖像四個角添加暗影效果,這暗影向圖像中心逐漸淡化.我們使用如下公式來實現:假設圖像寬度高度分別爲w,h:double d = Math.Sqrt((i - w / 2) * (i - w / 2) + (j -  ...
  • 圖像濾鏡藝術---霓虹、浮雕、木刻濾鏡
     圖像特效往往可以將普通的照片呈現出一種令人耳目一新的效果,特效的種類繁多,比如各種流行的 濾鏡特效等等,今天,我們介紹幾種最簡單的濾鏡:霓虹效果,浮雕效果和木刻效果.     1,霓虹濾鏡     霓虹是用來描繪圖像的輪廓,勾畫出顔色變化的邊緣,加強其過度效果,使圖像産生輪廓發光的效果.主要原理是 ...
  • 圖像濾鏡藝術---球面(Spherize)濾鏡
    球面(Spherize)濾鏡 球面濾鏡是通過極坐標變換實現圖像的球面特效. 代碼如下:         //        ///         /// Pinch Filter        ///        /// Source image.        /// The X positi ...
  • 圖像濾鏡藝術---Wave濾鏡
    Wave Filter水波濾鏡 水波濾鏡是通過坐標變換來模擬水波效果,使圖像呈現出水波的特效.這個濾鏡有一個可調參數:水波的扭曲程度. 代碼如下;//        ///        /// Wave Filter        ///        /// Source image.      ...
  • 圖像濾鏡藝術---Swirl濾鏡
    Swirl Filter Swirl 濾鏡是實現圖像圍繞中心點(cenX,cenY)扭曲旋轉的效果,效果圖如下: 原圖 效果圖 代碼如下:         //         ///         /// Swirl Filter         ///         /// Source i ...
一周排行