• 图片背景透明化


    背景透明化在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/ 可以白手起家不可手无寸铁!我是我命运的主宰者,我是我灵魂的掌舵人! 每一次的选择都将是一个挑战!
  • 相关阅读:
    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 解决办法
    MySQL意外关闭, 导致软件崩溃而无法启动的解决办法
    !function 笔记
    C++中四种类型转换方式
    SpringCloud面试题及答案
    Spring Boot面试题
    javaWeb常用面试题
    mysql行转列 问题 SUM(IF(条件,列值,0))
    mysql行列转换
    C++面试常见题
  • 原文地址:https://www.cnblogs.com/yunanwu/p/4168581.html
Copyright © 2020-2023  润新知