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 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);
    }
  }
}

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

(0)

相关推荐

  • C#生成饼形图及添加文字说明实例代码

    本文以实例形式说明了C#生成饼形图,圆饼图,并为图表添加文字注释的方法.可实现文字显示在图表周围,直观形象的展示各个数据分量的走抛情况的效果.通常在编写系统报表过程中,使用图表显示数据是很多人认可的方式.本文所述的就是一个用Visual C#生成圆饼型图表,并且在图表外围添加数据分量报表说明的一个例子. 具体功能代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using Syst

  • C#做线形图的方法

    线形图是图表分析的一种形式,通过线形图可以比较直观的分析出数据的变化趋势,那么如何绘制线形图呢?接下来就给大家介绍一种绘制线形图的方法--如何使用excel绘制线形图. 1.首先在电脑上打开excel软件并创建一个空白表格,使用Microsoft office excel或WPS excel均可,在这里我们以WPS excel为例介绍,如下图所示. 2.接下来我们在创建的空白excel表格内添加数据,比如设计北京,上海,广州三个城市1月-6月份的销量表格,如下图所示. 3.表格内容添加完毕之后,

  • C#波形图控件制作示例程序

    首先添加一个timer,50s 复制代码 代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Text;using System.Windows.Forms; namespace High_Tech_Watch{    public partial class UserControl1

  • C# 绘制统计图大全(柱状图, 折线图, 扇形图)

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用就C# 制作三款最经典的统计图: 柱状图, 折线图和扇形图:既然是统计, 当然需要数据, 这里演示的数据存于Sql Server2000中, 三款统计图形都是动态生成. 其中柱状图我会附上制作步骤, 其他两款统计图直接附源码. 说明: 需求不一样, 统计图形绘制后的显示效果也不一样, 比如这里柱状图

  • C#实现绘制面形图表的方法详解

    本例详细讲述了C#实现的面形图绘制例子,这是其中一个核心绘制文件的代码,代码中的里面的注释很多,也比较详细,相信对于初学者学习及理解C#图形绘制方面的技术要点.难点有所帮助. C#绘制面形图的主要功能代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using S

  • 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 t

  • python使用PyGame绘制图像并保存为图片文件的方法

    本文实例讲述了python使用PyGame绘制图像并保存为图片文件的方法.分享给大家供大家参考.具体实现方法如下: ''' pg_draw_circle_save101.py draw a blue solid circle on a white background save the drawing to an image file for result see http://prntscr.com/156wxi tested with Python 2.7 and PyGame 1.9.2

  • Android 使用Canvas在图片上绘制文字的方法

    [Android]Android中 Paint 字体.粗细等属性的一些设置 在Android SDK中使用Typeface类来定义字体,可以通过常用字体类型名称进行设置,如设置默认黑体: Paint mp = new paint(); mp.setTypeface(Typeface.DEFAULT_BOLD) 常用的字体类型名称还有: * Typeface.DEFAULT //常规字体类型 * Typeface.DEFAULT_BOLD //黑体字体类型 * Typeface.MONOSPACE

  • autojs长宽不定的图片在正方形图片居中实现详解

    目录 正文 思路整理 计算缩放系数 缩放图片 绘制图片时左上角坐标 绘制图片 第二种方法 第三种方法 正文 图片的长宽不是固定的, 正方形图片的长宽是固定的, 比如512x512 思路整理 图片肯定是要缩放的, 我要需要一个缩放系数; 图片肯定是要有位置的, 因此, 我们需要一个坐标; 我们一共需要两样东西 缩放系数 绘制图片时, 左上角坐标 计算缩放系数 "nodejs"; const { readImage } = require("image"); async

  • pyqt5实现按钮添加背景图片以及背景图片的切换方法

    简介 对与控件QPushButton中的可以使用setStyleSheet设置它背景图片.具体设置背景图片的方法有两种 self.button.setStyleSheet("QPushButton{background-image: url(img/1.png)}") 然而对于这种方法背景图片无法进行边框的自适应,可以使用下面的方法 self.button.setStyleSheet("QPushButton{border-image: url(img/1.png)}&quo

  • python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】

    本文实例讲述了python matplotlib模块基本图形绘制方法.分享给大家供大家参考,具体如下: matplotlib模块是python中一个强大的绘图模块 安装 pip  install matplotlib 首先我们来画一个简单的图来感受它的神奇 import numpy as np import matplotlib.pyplot as plt import matplotlib zhfont1=matplotlib.font_manager.FontProperties(fname

  • javascript实现图片轮换动作方法

    图片轮换是一种相当复杂的技术,早些年基本用flash实现.这里有一个链接,教大家如何用flash实现它的.之所以用flash,是因为flash是基于帧的,这与图片轮换的原理相当接近.为了模拟帧的效果,我们要用到overflow把多余的部分遮罩掉,也就是flash中常说的遮罩层.在Flash中,连时间轴都是可视的,而我们则全凭想象力与数学来计算现在是到了哪一张图.加之,flash有Robert Penner大神的缓动公式,那实在太耀眼,直到script.aculo.us类库搞出自己的缓动公式,才扭

  • python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)

    最近学了下 python opencv,分享下使用 opencv 在图片上绘制常用图形的方法. 案例中实现了在图片中添加线段.圆形.矩形.椭圆形以及添加文字的方法,使用 opencv2 实现的. 实现方法 1)画线段 cv.line 在图片中绘制一段直线 # 绘制线段 # 参数1:图片 # 参数2:起点 # 参数3:终点 # 参数4:BGR颜色 # 参数5:宽度 cv2.line(img, (60, 40), (90, 90), (255, 255, 255), 2); 参数说明 参数 值 说明

  • vue js中实现图片压缩封装方法

    全局main.js引入: // 引入imgUpload方法 import * as imgUpload from "./utils/imgUpload" //外部使用 Vue.prototype.$imgUpload = imgUpload 新建imgUpload.js: const dataURLtoFile = (dataurl, filename) => { // 将base64转换为file文件 let arr = dataurl.split(',') let mime

  • 基于C#实现在图片上绘制文字

    目录 实践过程 效果 代码 实践过程 效果 代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { if (textBox1.Text.Length != 0 && pictureBox1.Image != null) { Bitmap bt = new Bitmap(pi

随机推荐