好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#图片按比例缩放实例

本文实例为大家分享了C#图片按比例缩放的具体代码,供大家参考,具体内容如下

工具类代码:

?

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace ZoomImage.Utils

{

  /// <summary>

  /// 图片缩放

  /// </summary>

  public class ZoomImageUtil

  {

   /// <summary>

   /// 图片缩放

   /// </summary>

   /// <param name="bmp">图片</param>

   /// <param name="width">目标宽度,若为0,表示宽度按比例缩放</param>

   /// <param name="height">目标长度,若为0,表示长度按比例缩放</param>

   public static Bitmap GetThumbnail(Bitmap bmp, int width, int height)

   {

    if (width == 0)

    {

     width = height * bmp.Width / bmp.Height;

    }

    if (height == 0)

    {

     height = width * bmp.Height / bmp.Width;

    }

 

    Image imgSource = bmp;

    Bitmap outBmp = new Bitmap(width, height);

    Graphics g = Graphics.FromImage(outBmp);

    g.Clear(Color.Transparent);

    // 设置画布的描绘质量  

    g.CompositingQuality = CompositingQuality.HighQuality;

    g.SmoothingMode = SmoothingMode.HighQuality;

    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

    g.DrawImage(imgSource, new Rectangle(0, 0, width, height + 1), 0, 0, imgSource.Width, imgSource.Height, GraphicsUnit.Pixel);

    g.Dispose();

    imgSource.Dispose();

    bmp.Dispose();

    return outBmp;

   }

  }

}

使用示例:

?

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.Windows.Forms;

using ZoomImage.Utils;

 

namespace ZoomImage

{

  public partial class Form1 : Form

  {

   public Form1()

   {

    InitializeComponent();

   }

 

   private void Form1_Load( object sender, EventArgs e)

   {

    openFileDialog1.Multiselect = true ;

   }

 

   private void txtWidth_KeyPress( object sender, KeyPressEventArgs e)

   {

    if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar))

    {

     e.Handled = true ;

    }

   }

 

   private void txtHeight_KeyPress( object sender, KeyPressEventArgs e)

   {

    if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar))

    {

     e.Handled = true ;

    }

   }

 

   private void btnSelectImage_Click( object sender, EventArgs e)

   {

    try

    {

     if (txtWidth.Text == "" && txtHeight.Text == "" )

     {

      return ;

     }

 

     if (openFileDialog1.ShowDialog() == DialogResult.OK)

     {

      Task.Factory.StartNew(() =>

      {

       string path = Path.GetDirectoryName(openFileDialog1.FileNames[0]) + "\\NewImage\\" ;

 

       int i = 0;

       foreach ( string fileName in openFileDialog1.FileNames)

       {

        Bitmap bmp = ZoomImageUtil.GetThumbnail( new Bitmap(fileName), Convert.ToInt32(txtWidth.Text == "" ? "0" : txtWidth.Text), Convert.ToInt32(txtHeight.Text == "" ? "0" : txtHeight.Text));

        if (!Directory.Exists(path))

        {

         Directory.CreateDirectory(path);

        }

        File.Delete(path + Path.GetFileName(fileName));

        bmp.Save(path + Path.GetFileName(fileName));

        this .Invoke( new InvokeDelegate(() =>

        {

         lblProgress.Text = string .Format( "进度:{1}/{0}" , openFileDialog1.FileNames.Length, ++i);

        }));

        Thread.Sleep(1);

       }

 

       MessageBox.Show( "成功!" );

      });

     }

    }

    catch (Exception ex)

    {

     MessageBox.Show(ex.Message);

    }

   }

 

  }

 

  /// <summary>

  /// 跨线程访问控件的委托

  /// </summary>

  public delegate void InvokeDelegate();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

dy("nrwz");

查看更多关于C#图片按比例缩放实例的详细内容...

  阅读:49次