当前位置: 移动技术网 > IT编程>开发语言>c# > C#图片按比例缩放实例

C#图片按比例缩放实例

2019年07月18日  | 移动技术网IT编程  | 我要评论

本文实例为大家分享了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();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网