HardBirch

C# 实现的 批量彩色图片转黑白图片的小工具 (附源码)

时间:12-05-14 栏目:iOS游戏开发技术 作者:张飞不张,文采横飞 评论:0 点击: 1,689 次

因为工作需要将大量的彩色图片转换成黑白图片,所以索性自己花了点时间,自己写了一个,为了图方便,就用C#开发,代码很简单,实现了选择源路径,目标路径,覆盖源路径,有进度条显示。没有专门学过C#,所以代码写的不怎么样。。希望大家谅解---

(注:因为是用VS2010开发的,所以需要安装.Net Framework4.0 才能运行。。)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        static   IList<string> path = new List<string>();  //保存你图片名称
        Bitmap curBitmap = null;
        Bitmap resBitmap = null;
        int count = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void sourcebtn_Click(object sender, EventArgs e)
        {
                  FolderBrowserDialog dialog = new FolderBrowserDialog();
                 dialog.Description = "请选择文件路径";
                if (dialog.ShowDialog() == DialogResult.OK) {
                    sourceStr.Text = dialog.SelectedPath;
                }
        }

        private void resultbtn_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            dialog.Description = "请选择文件路径";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                resultStr.Text = dialog.SelectedPath;
            }
        }

        private void startbtn_Click(object sender, EventArgs e)
        {
                DirectoryInfo di = new DirectoryInfo(sourceStr.Text);
                //获取该路径下的所有文件的列表
                FileInfo[] fileInfo = di.GetFiles();
                path.Clear();
                //开始得到图片名称
                foreach (FileInfo subinfo in fileInfo)
                {
                    //判断扩展名是否相同
                    if (subinfo.Extension == ".jpg" || subinfo.Extension == ".JPG" || subinfo.Extension == ".jpeg" || subinfo.Extension == ".JPEG")
                     {
                           string strname = subinfo.Name;   //获取文件名称

                            path.Add(strname);            //把文件名称保存在泛型集合中
                            info.Text = "找到" + path.Count + "张图片";
                      }
                }
                if (path.Count>0)
                {
                    progressBar1.Value = 0;
                    progressBar1.Step = (int)100 / path.Count;
                    new System.Threading.Thread(new System.Threading.ThreadStart(StartTransform)).Start();
                }
                else
                {
                    MessageBox.Show("没有找到JPG图片文件");
                }

        }

        delegate void MyDelegate(int param);
        void DelegateMethod(int param)
        {
            total.Text = "正在处理第" + (count + 1) + "/" + path.Count + "张图片";
            if ((count+1) == path.Count)
            {
                progressBar1.Value = 100;
                total.Text = path.Count+"张图片处理完成";
            }else
            {
                 progressBar1.PerformStep();
            }

        }

        public  void  StartTransform()
        {

                int  ih ,iw;
                string filename;

                for (count = 0; count < path.Count; count++ )
                {
                    try
                    {

                        filename = path[count];
                        pictureBox1.Refresh();
                        Image image =Image.FromFile(sourceStr.Text + "\" + filename);
                        curBitmap = new Bitmap(image);
                        image.Dispose();
                         pictureBox1.Image = curBitmap;

                         iw = pictureBox1.Image.Width;
                         ih = pictureBox1.Image.Height;
                         resBitmap = toGray(curBitmap, iw, ih);
                        pictureBox2.Refresh();
                        pictureBox2.Image = resBitmap;

                        if (isCover.Checked)
                        {
                            pictureBox2.Image.Save(sourceStr.Text + "\" + filename);  //覆盖源文件

                        }
                        else
                        {
                            pictureBox2.Image.Save(resultStr.Text + "\" + filename);   //设置保存路径
                        }
                        //更新UI界面
                        this.Invoke(new MyDelegate(DelegateMethod), count);
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }

                }
        }

        public Bitmap toGray(Bitmap bm, int iw, int ih)
        {
            Color c = new Color();
            int t;

            //转变为灰度图像矩阵
            for (int j = 0; j < ih; j++)
            {
                for (int i = 0; i < iw; i++)
                {
                    c = bm.GetPixel(i, j);
                    t = (int)((c.R + c.G + c.B) / 3.0);

                    bm.SetPixel(i, j, Color.FromArgb(t, t, t));
                }
            }
            return bm;
        }

        private void isCover_CheckedChanged(object sender, EventArgs e)
        {
                if(isCover.Checked)
                {
                    resultStr.Enabled = false;
                    resultbtn.Enabled = false;
                }else
                {
                    resultStr.Enabled = true;
                    resultbtn.Enabled = true;
                }
        }

    }
}

工具下载地址:

http://download.csdn.net/detail/toss156/4300035    压缩的有问题,重新上传了一个可以正常解压的。。

http://download.csdn.net/detail/toss156/4303127

C# 实现的 批量彩色图片转黑白图片的小工具 (附源码):等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐