Home  >  Article  >  Backend Development  >  C# image scaling sample code sharing

C# image scaling sample code sharing

黄舟
黄舟Original
2017-03-16 11:20:021815browse

这篇文章主要为大家详细介绍了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
{
 /// 
 /// 图片缩放
 /// 
 public class ZoomImageUtil
 {
  /// 
  /// 图片缩放
  /// 
  /// 图片
  /// 目标宽度,若为0,表示宽度按比例缩放
  /// 目标长度,若为0,表示长度按比例缩放
  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);
   }
  }

 }

 /// 
 /// 跨线程访问控件的委托
 /// 
 public delegate void InvokeDelegate();
}

The above is the detailed content of C# image scaling sample code sharing. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn