以前写了个给添加水印的工具
也可以用来转换格式
发现一次转换十多个图片时比较慢
但是同样的图片添加水印时却快得多
于是就对比测试了一个那个Bitmap得save方法图片保存在 bitmap
方法一:
bitmap.save(path,imageType);
直接使用save方法转换格式
方法二:
Graphics g = Graphics.FromImage(bitmap)
g.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
new_img.save(path,imageType);
使用DrawImage将图片写入到new_img后再保存用20个1024的jpg测试了一下
方法一:37.156秒
方法二:4.203秒用单个文件测试了一下
选用1600x1200的jpg,转换成bmp
测试5次取平均值
方法一:3028毫秒
方法二:424毫秒
巨大的差距啊...高达86%哪位高人能解释一下为什么会有那么大的差距吗?小弟刚接触C#不久,不要见笑啊。

解决方案 »

  1.   

    方法一:
    bitmap.save(path,imageType);
    直接使用save方法转换格式
    方法二:
    Graphics g = Graphics.FromImage(bitmap)
    g.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
    new_img.save(path,imageType);方法一前面的代码是啥?
    方法二中new_img是怎么构造的??
      

  2.   

    回delicioustian(天天酷鱼),这是我的测试代码
    大家都帮忙看看吧
    最好使用1600x1200及以上的图片,这样子差距明显
    对于这个效率存有疑问,还请大侠释疑...
    这里有编译好的程序: http://kitten.blog.pcicp.com/job.php?action=download&pid=&tid=12080&aid=10829
    这个是工程文件: http://kitten.blog.pcicp.com/job.php?action=download&pid=&tid=12080&aid=10830
    =================================================================================
            private Bitmap m_bitmap;   
            private Bitmap bmpNew;                     /// <summary>
            /// 打开图片
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void open_button_Click(object sender, EventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Multiselect = false;
                ofd.Filter = "所有图片格式|*.jpg;*.jpeg;*.bmp;*.tiff;*.tif;*.gif;*.png|JPEG 图片(*.jpg)|*.jpg;*.jpeg|BMP 图片(*.bmp)|*.bmp;*.BMP|TIFF 图片(*.tiff)|*.tiff;*.tif|GIF 图片(*.gif)|*.gif|PNG 图片(*.png)|*.png;*.PNG";
                string filter = ofd.Filter;
                ofd.InitialDirectory = System.Environment.CurrentDirectory;
                ofd.Title = "打开图象文件";            if (ofd.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        m_bitmap = new Bitmap(ofd.FileName);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("图片文件格式非法!","错误");
                    }
                }            this.save_button.Enabled = true;
                this.save_button_1.Enabled = true;
            }        /// <summary>
            /// 保存图片(方法一)
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void save_button_Click(object sender, EventArgs e)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Title = "图象保存位置...";
                sfd.OverwritePrompt = true;
                sfd.CheckPathExists = true;
                sfd.Filter = "BMP 图片(*.bmp)|*.bmp";            if (sfd.ShowDialog() == DialogResult.OK)
                {
                    string strFileName = sfd.FileName;                DateTime StartTime = DateTime.Now; //开始执行的时间                m_bitmap.Save(strFileName, ImageFormat.Bmp);                DateTime EndTime = DateTime.Now; //完成执行的时间
                    TimeSpan ts = EndTime - StartTime;
                    MessageBox.Show("顺利完成转换!             \n\n耗时: " + (ts.Seconds).ToString() + "." + ts.Milliseconds.ToString() + " 秒", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }        /// <summary>
            /// 保存图片(方法二)
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void save_button_1_Click(object sender, EventArgs e)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Title = "图象保存位置...";
                sfd.OverwritePrompt = true;
                sfd.CheckPathExists = true;
                sfd.Filter = "BMP 图片(*.bmp)|*.bmp";            if (sfd.ShowDialog() == DialogResult.OK)
                {
                    string strFileName = sfd.FileName;                DateTime StartTime = DateTime.Now; //开始执行的时间                this.bmpNew = new Bitmap(m_bitmap.Width, m_bitmap.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    this._draw();
                    bmpNew.Save(strFileName, ImageFormat.Bmp);                DateTime EndTime = DateTime.Now; //完成执行的时间
                    TimeSpan ts = EndTime - StartTime;
                    MessageBox.Show("顺利完成转换!             \n\n耗时: " + (ts.Seconds).ToString() + "." + ts.Milliseconds.ToString() + " 秒", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }        public void _draw()
            {
                Graphics g = Graphics.FromImage(bmpNew);
                g.Clear(Color.White);
                g.SmoothingMode = SmoothingMode.HighQuality;
                g.InterpolationMode = InterpolationMode.High;            g.DrawImage(m_bitmap, 0, 0, m_bitmap.Width, m_bitmap.Height);
                g.Dispose();
            }
    ====================================================================================