图片背景透明化

背景透明化在PS中那是神速,可惜me不会PS,早上为了把一张LOGO的白色背景弄成透明,程序员吧,只好求助程序了,花个一个多小时写了个小程序。。

先看下效果吧。。

马马虎虎还OK吧??接下来看下主要的图片处理方法。。。

 

 

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

共享下程序源代码。

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

本文从百度空间搬家到博客园。。

邮箱:yunanwu@foxmail.com 微博:@提灯寻影(http://weibo.com/wuyunnan) 技术主页:http://www.cnblogs.com/yuanawu/ 可以白手起家不可手无寸铁!我是我命运的主宰者,我是我灵魂的掌舵人! 每一次的选择都将是一个挑战!
原文地址:https://www.cnblogs.com/yunanwu/p/4168581.html