圖像濾鏡藝術---旋轉模糊濾鏡

本文介紹一種旋轉模糊濾鏡的實現算法。
旋轉模糊主要特點是:整張圖像圍繞一個中心點做旋轉變換,同時有個控制旋轉程度的變量和一個控制模糊程度的變量,來完成這個效果。圖像中距離中心點越近,旋轉和模糊的程度都越小,反之,越大。
假設中心點O坐標爲(cenX,cenY),當前點位置爲P(x,y):
1,PO距離Dis=Math.Sqrt((y - cenY) * (y - cenY) + (x - cenX) * (x - cenX));
2,PO和水平方向夾角angle=Math.Atan2((double)(y - cenY), (double)(x - cenX));
3,當前點P對應的旋轉後新的坐標newX,newY計算:
newX = Dis * Math.Cos(angle) + cenX;
newY = Dis * Math.Sin(angle) + cenY;
下面給出完整的C#代碼:
 /// <summary>
        /// Rotate Blur
        /// </summary>
        /// <param name="src">Source image.</param>
        /// <param name="cenX">The X position of Blur.</param>
        /// <param name="cenY">The Y position of Blur.</param>
        /// <param name="intensity">The intensity of blur,0-100.</param>
        /// <returns>The result image.</returns>
        private Bitmap RotateBlurProcess(Bitmap srcBitmap, int cenX, int cenY, int intensity)
        {
            Bitmap a = new Bitmap(srcBitmap);
            int w = a.Width;
            int h = a.Height;
            cenX = Math.Min(w - 1, Math.Max(0, cenX));
            cenY = Math.Min(h - 1, Math.Max(0, cenY));
            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 stride = srcData.Stride - w * 4;
                int newX = 0, newY = 0;
                double angle = 0;
                double temp = 0, r = 0, g = 0, b = 0;
                for (int y = 0; y < h; y++)
                {
                    for (int x = 0; x < w; x++)
                    {
                        r = 0;
                        g = 0;
                        b = 0;
                        temp = Math.Sqrt((y - cenY) * (y - cenY) + (x - cenX) * (x - cenX));
                        angle = Math.Atan2((double)(y - cenY), (double)(x - cenX));
                        for (int n = 0; n < intensity; n++)
                        {
                            angle = angle + 0.005;
                            newX = (int)(temp * Math.Cos(angle) + (double)cenX);
                            newY = (int)(temp * Math.Sin(angle) + (double)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;
                            b = b + p[0];
                            g = g + p[1];
                            r = r + p[2];
                        }
                        b = Math.Min(255, Math.Max(0, b / intensity));
                        g = Math.Min(255, Math.Max(0, g / intensity));
                        r = Math.Min(255, Math.Max(0, r / intensity));
                        pOut[0] = (byte)b;
                        pOut[1] = (byte)g;
                        pOut[2] = (byte)r;
                        pOut[3] = (byte)255;
                        pOut += 4;
                    }
                    pOut += stride;
                }
                a.UnlockBits(srcData);
                dst.UnlockBits(dstData);
            }
            return dst;
        }
最後,看下效果圖:

圖像濾鏡藝術---旋轉模糊濾鏡

原圖

圖像濾鏡藝術---旋轉模糊濾鏡

效果圖

給出一個完整DEMO程序的下載地址:http://www.zealpixel.com/forum.php?mod=viewthread&tid=148&extra=page%3D1 跟大家分享一下!
更多相關文章
  • 圖像濾鏡藝術---(Sketch Filter)素描濾鏡
    (Sketch Filter)素描濾鏡 素描濾鏡的實現方法比較簡單,這裏我們直接寫出算法過程如下: 1, 原圖 素描濾鏡效果圖 最後放上完整C#/C程序DEMO下載連接:http://www.zealpixel.com/thread-64-1-1.html
  • 圖像濾鏡藝術---擠壓(Pinch)濾鏡
    Pinch濾鏡 Pinch濾鏡是通過坐標變換來實現以某個點(cenX,cenY)爲中心,某個半徑R內圖像向其擠壓變形的效果.實現這個濾鏡的算法很多,主要是數學公式的不同,大家可以自行設計,這裏給個代碼示例,大家可以直接使用.代碼如下://        /// <summary>    ...
  • 圖像濾鏡藝術---Oilpaint油畫濾鏡
     Oilpaint油畫濾鏡    圖像油畫效果實際上是將圖像邊緣産生一種朦胧,霧化的效果,同時,將一定的邊緣模糊化,這樣圖像整體上看去像素與像素之間就像霧一樣隨機呈現. 算法過程如下: 假設當前像素爲P(x,y),他的隨機位置爲Pd(dx,dy),那麽算法公式如下: 其中,K(v)爲最大值不大于v的 ...
  • 這是我自己結合網上的一些資料封裝的java圖片處理類,支持圖片的縮放,旋轉,馬賽克化.(轉載請注明出處:http://blog.csdn.net/u012116457) 不多說,上代碼:package deal; import java.awt.Color; import java.awt.Grap ...
  • 圖像濾鏡藝術---Swirl濾鏡
    Swirl Filter Swirl 濾鏡是實現圖像圍繞中心點(cenX,cenY)扭曲旋轉的效果,效果圖如下: 原圖 效果圖 代碼如下:         //         ///         /// Swirl Filter         ///         /// Source i ...
  • 圖像濾鏡藝術---圖像濾鏡暈影調節算法研究
    本文對濾鏡中常見的暈影,暈角效果的實現做了研究,具體如下:1 暈影調整算法所謂暈影就是給圖像四個角添加暗影效果,這暗影向圖像中心逐漸淡化.我們使用如下公式來實現:假設圖像寬度高度分別爲w,h:double d = Math.Sqrt((i - w / 2) * (i - w / 2) + (j -  ...
  • 圖像濾鏡藝術---霓虹、浮雕、木刻濾鏡
     圖像特效往往可以將普通的照片呈現出一種令人耳目一新的效果,特效的種類繁多,比如各種流行的 濾鏡特效等等,今天,我們介紹幾種最簡單的濾鏡:霓虹效果,浮雕效果和木刻效果.     1,霓虹濾鏡     霓虹是用來描繪圖像的輪廓,勾畫出顔色變化的邊緣,加強其過度效果,使圖像産生輪廓發光的效果.主要原理是 ...
  • 圖像濾鏡藝術---球面(Spherize)濾鏡
    球面(Spherize)濾鏡 球面濾鏡是通過極坐標變換實現圖像的球面特效. 代碼如下:         //        ///         /// Pinch Filter        ///        /// Source image.        /// The X positi ...
一周排行
  • 創業室簡介志峰創業室 是一家移動互聯網行業中的高科技創新型創業室.我們致力于用移動互聯網來改變整個傳統企業軟件行業.公司拳頭産品移動外勤是使用雲計算,移動應用和SAAS軟件技術的創新型企業軟件.目前已經服務了超過20 ...
  •       我們經常在編程中都要編寫時間,什麽年,月,日,時,分,秒.而JAVA給我們提供了一個Date()類,而直接用它,會出現很多得不便.而在String類中的靜態方法format()給我們提供了方面.forma ...
  • 1. Apache與Tomcat相關介紹    1.1 相同點    1.1.1 兩者都是apache組織開發的     1.1.2 兩者都有HTTP服務的功能     1.1.3 兩者都是免費的     1.2 不 ...
  • 在翻閱Views這個文件夾的時候,有些看懂有些看不懂,霧裏看花.但是萬事怕研究,分開來看看.它山之石,可以攻玉.從Django到ASP .net ,我熟悉了他們關于模版的設計思維,我也不小心被俘虜了.所以到了mvc中 ...
  • JBoss 系列八十六: JBoss Modules module.xml 中 export=true 是什麽意思
    概述JBoss Modules module.xml 中dependencies有expo ...
  • 重入一般可以理解爲一個函數在同時多次調用,例如操作系統在進程調度過程中,或者單片機.處理器等的中斷的時候會發生重入的現象. 一般浮點運算都是由專門的硬件來完成,舉個例子假設有個硬件寄存器名字叫做FLOAT,用來計算和 ...
  • Java並發框架——同步狀態的管理
    整個AQS框架核心功能都是圍繞著其32位整型屬性state進行,一般可以說它表示鎖的數量, ...
  • 看到一網友發的網易工作經驗,感覺挺有意思的,整理如下:1.先做人,後做事;對事不對人. 人品做好了,自然好辦事,事情出問題了,不要針對某人,應當分析問題,找出原因,在事後總結.防範,真相出來來,該承擔的就承擔. 2. ...
  • http://doc.rust-lang.org/0.12.0/guide.html 13標准輸入 fn main() {     println!("Type something!");     ...
  • Android 抽屜效果Demo
     Android 抽屜效果Demo. 轉載:http://www.adobex.com/a ...