zoukankan      html  css  js  c++  java
  • winform工具1-图片去除水印

    效果图:

    思路:

    1.获取图片

    2.处理水印

    3.保存处理的图片

    代码:

    获取图片:

    private void button1_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Multiselect = true;
                //文件格式
                openFileDialog.Filter = "所有文件|*.*";
                //还原当前目录
                openFileDialog.RestoreDirectory = true;
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    string oldImgPath = openFileDialog.FileName;
                    this.textBox1.Text = oldImgPath;
                    this.textBox2.Text = this.textBox2.Text += "
    " + "图片路径:" + oldImgPath;
                }
            }

    处理水印并保存:

    private void button2_Click(object sender, EventArgs e)
            {
                Image oldImg = Image.FromFile(this.textBox1.Text);
                this.textBox2.Text = this.textBox2.Text += "
    " + "去除水印...";
                if (this.textBox3.Text == "255,255,255" || this.textBox3.Text == string.Empty)
                {
                    this.textBox2.Text += "
    " + "请设置水印的rgb值";
                    return;
                }
                string[] rgbItem = this.textBox3.Text.Split(',');
                Image newImg = imgHelper.SetImageColorAll(oldImg, Color.FromArgb(Convert.ToInt32(rgbItem[0]),Convert.ToInt32(rgbItem[1]),Convert.ToInt32(rgbItem[2])), Color.White, 20);
                this.textBox2.Text = this.textBox2.Text += "
    " + "去除水印成功,正在保存...";
                string savPath = this.textBox1.Text.Substring(0, this.textBox1.Text.LastIndexOf('\'));
                if (this.textBox4.Text == "格式:文件名+.png/.jpg" || this.textBox4.Text == string.Empty)
                {
                    this.textBox2.Text += "
    " + "未设置保存的文件名,自动保存的文件名为:cs.png";
                    return;
                }
                savPath = Path.Combine(savPath,this.textBox4.Text);//合成路径
                newImg.Save(savPath);
                this.textBox2.Text = this.textBox2.Text += "
    " + "保存成功!";
            }
    //处理水印类

    public class imgHelper
    {
    public static Image SetImageColorAll(Image p_Image, Color p_OdlColor, Color p_NewColor, int p_Float)
    {
    int _Width = p_Image.Width;
    int _Height = p_Image.Height;

    Bitmap _NewBmp = new Bitmap(_Width, _Height, PixelFormat.Format32bppArgb);
    Graphics _Graphics = Graphics.FromImage(_NewBmp);
    _Graphics.DrawImage(p_Image, new Rectangle(0, 0, _Width, _Height));
    _Graphics.Dispose();
    //图片背景处理的操作
    BitmapData _Data = _NewBmp.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
    _Data.PixelFormat = PixelFormat.Format32bppArgb;
    int _ByteSize = _Data.Stride * _Height;
    byte[] _DataBytes = new byte[_ByteSize];
    Marshal.Copy(_Data.Scan0, _DataBytes, 0, _ByteSize);

    int _WhileCount = _Width * _Height;
    int _Index = 0;
    for (int i = 0; i != _WhileCount; i++)
    {
    Color _Color = Color.FromArgb(_DataBytes[_Index + 3], _DataBytes[_Index + 2], _DataBytes[_Index + 1], _DataBytes[_Index]);
    if (ScanColor(_Color, p_OdlColor, p_Float))
    {
    _DataBytes[_Index + 3] = (byte)p_NewColor.A;
    _DataBytes[_Index + 2] = (byte)p_NewColor.R;
    _DataBytes[_Index + 1] = (byte)p_NewColor.G;
    _DataBytes[_Index] = (byte)p_NewColor.B;
    }
    _Index += 4;
    }
    Marshal.Copy(_DataBytes, 0, _Data.Scan0, _ByteSize);
    _NewBmp.UnlockBits(_Data);
    return _NewBmp;
    }

    private static bool ScanColor(Color p_CurrentlyColor, Color p_CompareColor, int p_Float)
    {
    int _R = p_CurrentlyColor.R;
    int _G = p_CurrentlyColor.G;
    int _B = p_CurrentlyColor.B;

    return (_R <= p_CompareColor.R + p_Float && _R >= p_CompareColor.R - p_Float) && (_G <= p_CompareColor.G + p_Float && _G >= p_CompareColor.G - p_Float) && (_B <= p_CompareColor.B + p_Float && _B >= p_CompareColor.B - p_Float);

    }
    }

  • 相关阅读:
    PAT(A) 1095. Cars on Campus (30)
    PAT(A) 1080. Graduate Admission (30)
    PAT(A) 1083. List Grades (25)
    Linux 使用create_ap开热点后无法连接wifi问题的解决
    汽车加油行驶问题(最短路)
    孤岛营救问题(最短路 状态压缩)  网络流24题
    软件补丁问题(状态压缩 最短路)
    餐巾计划问题(费用流)
    分配问题(二部图的最佳匹配 KM) 线性规划与网络流24题
    数字梯形问题(费用流)
  • 原文地址:https://www.cnblogs.com/newrohlzy/p/10126700.html
Copyright © 2011-2022 走看看