当前位置: 移动技术网 > 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 treads
{
  /// <summary>
  /// 制作小正方形
  /// </summary>
  class class3
  {
    private string srcfilename = @"x";//获取图片的路径
    private string srcfilename1 = @"x";//要保持图片的新路径

   

    /// <summary>
    /// 保存图片
    /// </summary>
    /// <param name="image">image 对象</param>
    /// <param name="savepath">保存路径</param>
    /// <param name="ici">指定格式的编解码参数</param>
    private static void saveimage(image image, string savepath, imagecodecinfo ici)
    {
      //设置 原图片 对象的 encoderparameters 对象
      encoderparameters parameters = new encoderparameters(1);
      parameters.param[0] = new encoderparameter(system.drawing.imaging.encoder.quality, ((long)100));
      image.save(savepath, ici, parameters);
      parameters.dispose();
    }

    /// <summary>
    /// 获取图像编码解码器的所有相关信息
    /// </summary>
    /// <param name="mimetype">包含编码解码器的多用途网际邮件扩充协议 (mime) 类型的字符串</param>
    /// <returns>返回图像编码解码器的所有相关信息</returns>
    private static imagecodecinfo getcodecinfo(string mimetype)
    {
      imagecodecinfo[] codecinfo = imagecodecinfo.getimageencoders();
      foreach (imagecodecinfo ici in codecinfo)
      {
        if (ici.mimetype == mimetype)
          return ici;
      }
      return null;
    }

    /// <summary>
    /// 计算新尺寸
    /// </summary>
    /// <param name="width">原始宽度</param>
    /// <param name="height">原始高度</param>
    /// <param name="maxwidth">最大新宽度</param>
    /// <param name="maxheight">最大新高度</param>
    /// <returns></returns>
    private static size resizeimage(int width, int height, int maxwidth, int maxheight)
    {
      //此次2012-02-05修改过=================
      if (maxwidth <= 0)
        maxwidth = width;
      if (maxheight <= 0)
        maxheight = height;
      //以上2012-02-05修改过=================
      decimal max_width = (decimal)maxwidth;
      decimal max_height = (decimal)maxheight;
      decimal aspect_ratio = max_width / max_height;

      int newwidth, newheight;
      decimal originalwidth = (decimal)width;
      decimal originalheight = (decimal)height;

      if (originalwidth > max_width || originalheight > max_height)
      {
        decimal factor;
        // determine the largest factor 
        if (originalwidth / originalheight > aspect_ratio)
        {
          factor = originalwidth / max_width;
          newwidth = convert.toint32(originalwidth / factor);
          newheight = convert.toint32(originalheight / factor);
        }
        else
        {
          factor = originalheight / max_height;
          newwidth = convert.toint32(originalwidth / factor);
          newheight = convert.toint32(originalheight / factor);
        }
      }
      else
      {
        newwidth = width;
        newheight = height;
      }
      return new size(newwidth, newheight);
    }

    /// <summary>
    /// 得到图片格式
    /// </summary>
    /// <param name="name">文件名称</param>
    /// <returns></returns>
    public static imageformat getformat(string name)
    {
      string ext = name.substring(name.lastindexof(".") + 1);
      switch (ext.tolower())
      {
        case "jpg":
        case "jpeg":
          return imageformat.jpeg;
        case "bmp":
          return imageformat.bmp;
        case "png":
          return imageformat.png;
        case "gif":
          return imageformat.gif;
        default:
          return imageformat.jpeg;
      }
    }
   

    /// <summary>
    /// 制作小正方形
    /// </summary>
    /// <param name="image">图片对象</param>
    /// <param name="newfilename">新地址</param>
    /// <param name="newsize">长度或宽度</param>
    public static void makesquareimage(image image, string newfilename, int newsize)
    {
      int i = 0;
      int width = image.width;
      int height = image.height;
      if (width > height)
        i = height;
      else
        i = width;

      bitmap b = new bitmap(newsize, newsize);

      try
      {
        graphics g = graphics.fromimage(b);
        //设置高质量插值法
        g.interpolationmode = interpolationmode.highqualitybicubic;
        //设置高质量,低速度呈现平滑程度
        g.smoothingmode = smoothingmode.antialias;
        g.pixeloffsetmode = pixeloffsetmode.highquality;
        //清除整个绘图面并以透明背景色填充
        g.clear(color.transparent);
        if (width < height)
          g.drawimage(image, new rectangle(0, 0, newsize, newsize), new rectangle(0, (height - width) / 2, width, width), graphicsunit.pixel);
        else
          g.drawimage(image, new rectangle(0, 0, newsize, newsize), new rectangle((width - height) / 2, 0, height, height), graphicsunit.pixel);

        saveimage(b, newfilename, getcodecinfo("image/" + getformat(newfilename).tostring().tolower()));
      }
      finally
      {
        image.dispose();
        b.dispose();
      }
    }

    /// <summary>
    /// 制作小正方形
    /// </summary>
    /// <param name="filename">图片文件名</param>
    /// <param name="newfilename">新地址</param>
    /// <param name="newsize">长度或宽度</param>
    public static void makesquareimage(string filename,string newfilename, int newsize)
    {
      makesquareimage(image.fromfile(filename), newfilename, newsize);
    }
  }
}

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

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

相关文章:

验证码:
移动技术网