图片背景透明化
背景透明化在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
本文从百度空间搬家到博客园。。