C#实现缩放和剪裁图片的方法示例

作者:songkexin 时间:2023-06-03 11:09:31 

本文实例讲述了C#实现缩放和剪裁图片的方法。分享给大家供大家参考,具体如下:


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace Project
{
 class ImageOperation
 {
   /// <summary>
   /// Resize图片
   /// </summary>
   /// <param name="bmp">原始Bitmap </param>
   /// <param name="newW">新的宽度</param>
   /// <param name="newH">新的高度</param>
   /// <param name="Mode">保留着,暂时未用</param>
   /// <returns>处理以后的图片</returns>
   public static Bitmap ResizeImage(Bitmap bmp, int newW, int newH, int Mode)
   {
     try
     {
       Bitmap b = new Bitmap(newW, newH);
       Graphics g = Graphics.FromImage(b);
       // 插值算法的质量
       g.InterpolationMode = InterpolationMode.HighQualityBicubic;
       g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
       g.Dispose();
       return b;
     }
     catch
     {
       return null;
     }
   }
   /// <summary>
   /// 剪裁 -- 用GDI+
   /// </summary>
   /// <param name="b">原始Bitmap</param>
   /// <param name="StartX">开始坐标X</param>
   /// <param name="StartY">开始坐标Y</param>
   /// <param name="iWidth">宽度</param>
   /// <param name="iHeight">高度</param>
   /// <returns>剪裁后的Bitmap</returns>
   public static Bitmap Cut(Bitmap b, int StartX, int StartY, int iWidth, int iHeight)
   {
     if (b == null)
     {
       return null;
     }
     int w = b.Width;
     int h = b.Height;
     if (StartX >= w || StartY >= h)
     {
       return null;
     }
     if (StartX + iWidth > w)
     {
       iWidth = w - StartX;
     }
     if (StartY + iHeight > h)
     {
       iHeight = h - StartY;
     }
     try
     {
       Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb);
       Graphics g = Graphics.FromImage(bmpOut);
       g.DrawImage(b, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(StartX, StartY, iWidth, iHeight), GraphicsUnit.Pixel);
       g.Dispose();
       return bmpOut;
     }
     catch
     {
       return null;
     }
   }
 }
}

目标其实都是new Rectangle(0, 0, iWidth, iHeight),缩放算法把整个原始图都往目标区域里塞new Rectangle(0, 0, bmp.Width, bmp.Height),而剪裁只是把原始区域上等宽等高的那个区域new Rectangle(StartX, StartY, iWidth, iHeight)1:1的塞到目标区域里。

希望本文所述对大家C#程序设计有所帮助。

标签:C#,缩放,剪裁,图片
0
投稿

猜你喜欢

  • Flutter图片与文件选择器使用实例

    2023-07-17 09:11:12
  • C# 写入XML文档三种方法详细介绍

    2021-11-08 23:20:08
  • 浅谈SpringCloud实现简单的微服务架构

    2023-05-22 12:59:34
  • Android获取app应用程序大小的方法

    2023-09-18 15:02:18
  • Springboot与Maven多环境配置的解决方案

    2023-11-29 08:53:58
  • Unity实现Flappy Bird游戏开发实战

    2023-03-10 19:56:58
  • Java中两种基本的输入方式小结

    2023-02-06 18:37:24
  • git版本回退_动力节点Java学院整理

    2022-06-21 13:26:10
  • java对象序列化与反序列化的默认格式和json格式使用示例

    2021-12-07 18:22:23
  • Java 动态代理的多种实现方式

    2023-11-20 05:23:14
  • Spring的组合注解和元注解原理与用法详解

    2023-12-05 10:25:05
  • java实现用户自动登录

    2023-11-10 14:38:59
  • java实现秒表功能

    2023-07-06 05:55:13
  • 单独编译Android 源代码中的模块实现方法

    2021-08-20 07:00:46
  • AccessibilityService实现微信发红包功能

    2023-06-23 03:51:53
  • JAVA实现长连接(含心跳检测Demo)

    2023-08-05 09:51:13
  • java实现快速排序图文详解

    2022-10-11 16:35:18
  • 实例讲解Java的Spring框架中的控制反转和依赖注入

    2023-04-24 17:44:49
  • 详解mybatis generator代码生成器的使用

    2021-08-28 09:05:42
  • Java+Selenium实现文件上传下载功能详解

    2021-06-23 23:33:23
  • asp之家 软件编程 m.aspxhome.com