圖片背景透明化

背景透明化在PS中那是神速,惋惜me不會PS,早上爲了把一張LOGO的白色背景弄成透明,程序員吧,只好求助程序了,花個一個多小時寫了個小程序。。程序員

先看下效果吧。。小程序

 

馬馬虎虎還OK吧??接下來看下主要的圖片處理方法。。。c#

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <summary>
        /// 轉換背景
        /// </summary>
        public void MakeTran()
        {
            if (pictureBox1.Image == null )
                return ;
            //獲取指定圖片
            Bitmap bmp = new Bitmap(pictureBox1.Image, pictureBox1.Image.Size);
            //鎖定圖片數據到內存中,用此來獲取一個與指定圖片相關聯的BitmapData實例。
            BitmapData data = bmp.LockBits( new Rectangle(0, 0, bmp.Width, bmp.Height),
                                            ImageLockMode.ReadWrite, bmp.PixelFormat);
            int length = data.Stride * data.Height;
            IntPtr ptr = data.Scan0; //Scan0是一個指針,指向了圖片數據所在內存的第一個位置。
            byte [] buff = new byte [length];
            Marshal.Copy(ptr, buff, 0, length); //複製內存到字節數組中
            //每四個字節循環,圖片存儲格式爲ARGB格式。
            for ( int i = 3; i < length; i += 4)
            {
                if (buff[i - 1] >= 230 && buff[i - 2] >= 230 && buff[i - 3] >= 230)
                {
                    buff[i] = 0;
                }
            }
            Marshal.Copy(buff, 0, ptr, length); //從新賦值內存數組
            bmp.UnlockBits(data); //解鎖內存數據
            pictureBox2.Image = bmp; //顯示處理以後的圖片
        }

 

 

達到目的就收手了,菜鳥級別,望高手指點。。看起來代碼不多吧。其實只是一個邏輯思惟而已,主要就是讀取圖片的二進制數據,而後遍歷循環更改臨近白色的背景就OK了。。。數組

共享下程序源代碼。ide

 

http://pan.baidu.com/share/link?shareid=2676098804&uk=839021066spa

本文從百度空間搬家到博客園。。指針

相關文章
相關標籤/搜索