简单的图片剪裁

 using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO; namespace ClassLibrary
{
/// <summary>
/// 图片处理
/// </summary>
public static class Img
{
#region 图片裁剪
#region 通过文件路径图片 public static Image ImgCutFromFile
/// <summary>
/// 通过文件路径裁剪图片
/// </summary>
/// <param name="imgFile">文件路径</param>
/// <param name="startX">图片左上角X坐标</param>
/// <param name="startY">图片左上角Y坐标</param>
/// <param name="width">截取宽度</param>
/// <param name="height">截取高度</param>
/// <param name="widthS">图片显示宽度</param>
/// <param name="heightS">图片显示高度</param>
/// <returns></returns>
public static Image ImgCutFromFile(string imgFile, int startX, int startY, int width, int height, int widthS = , int heightS=)
{ Image img = Image.FromFile(imgFile);
if (widthS > && heightS > )
{
GetXYWH(ref startX, ref startY, ref width, ref height, widthS, heightS, img);
}
return ImgCut(img, startX, startY, width, height);
}
#endregion #region 通过流图片 public static Image ImgCutFromStream
/// <summary>
/// 通过流图片
/// </summary>
/// <param name="stream">流</param>
/// <param name="startX">图片左上角X坐标</param>
/// <param name="startY">图片左上角Y坐标</param>
/// <param name="width">截取宽度</param>
/// <param name="height">截取高度</param>
/// <param name="widthS">图片显示宽度</param>
/// <param name="heightS">图片显示高度</param>
/// <returns></returns>
public static Image ImgCutFromStream(Stream stream, int startX, int startY, int width, int height, int widthS = , int heightS = )
{
Image img = Image.FromStream(stream);
if (widthS > && heightS > )
{
GetXYWH(ref startX, ref startY, ref width, ref height, widthS, heightS, img);
}
return ImgCut(img, startX, startY, width, height);
}
#endregion #region 获取实际XYWH private static void GetXYWH
/// <summary>
/// 获取实际XYWH
/// </summary>
/// <param name="startX">图片左上角X坐标</param>
/// <param name="startY">图片左上角Y坐标</param>
/// <param name="width">截取宽度</param>
/// <param name="height">截取高度</param>
/// <param name="widthS">图片显示宽度</param>
/// <param name="heightS">图片显示高度</param>
/// <param name="img"></param>
private static void GetXYWH(ref int startX, ref int startY, ref int width, ref int height, int widthS, int heightS, Image img)
{
/*img.Width / widthS 是实际图片大小与页面显示图片大小比值*/
startX = Convert.ToInt32(startX * img.Width / widthS);
startY = Convert.ToInt32(startY * img.Height / heightS);
width = Convert.ToInt32(width * img.Width / widthS);
height = Convert.ToInt32(height * img.Height / heightS);
}
#endregion #region 执行剪裁 public static Image ImgCut
/// <summary>
/// 图片裁剪
/// </summary>
/// <param name="image">图片</param>
/// <param name="startX">图片左上角X坐标</param>
/// <param name="startY">图片左上角Y坐标</param>
/// <param name="width">截取宽度</param>
/// <param name="height">截取高度</param>
/// <returns></returns>
public static Image ImgCut(Image image, int startX, int startY, int width, int height)
{
Image img = image;//获取原始图片
Image newImg = new Bitmap(width, height);//裁剪后的图片
Graphics g = Graphics.FromImage(newImg);
/*设置质量*/
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
/*图片源位置,图片源大小*/
Rectangle fromR = new Rectangle(startX, startY, width, height);
/*绘图位置绘图大小*/
Rectangle toR = new Rectangle(, , width, height);
/*画图*/
g.DrawImage(img, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
/*释放截图资源*/
g.Dispose();
return newImg;
//newImg.Save(Server.MapPath(""));
//newImg.Dispose();
}
#endregion
#endregion #region 改变图片大小 public static Image ImgSize
/// <summary>
/// 改变图片大小
/// </summary>
/// <param name="image">图片</param>
/// <param name="width">新宽度</param>
/// <param name="height">新高度</param>
/// <returns></returns>
public static Image ImgSize(Image image, int width = , int height = )
{
Image img = image;//获取原始图片
Image newImg = new Bitmap(width, height);//裁剪后的图片
Graphics g = Graphics.FromImage(newImg);
/*设置质量*/
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
/*图片源位置,图片源大小*/
Rectangle fromR = new Rectangle(, , img.Width, img.Height);
/*绘图位置绘图大小*/
if (width == && height == ) {
width = img.Width;
height = img.Height;
}
Rectangle toR = new Rectangle(, , width, height);
/*画图*/
g.DrawImage(img, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
/*释放截图资源*/
g.Dispose();
return newImg;
}
#endregion }
} Img

C#图片处理---基础的更多相关文章

  1. JQuery移动动画实现点击按钮切换图片--JQuery基础

    直接贴源码了哈,这些都是自己总结的……汗水几何?希望能帮到大家. <%@ Page Language="C#" AutoEventWireup="true" ...

  2. jsp动态图片页面基础

    1. 什么是动态网页? 动态网页是指在服务器端运行的程序或者网页,它们会随不同客户.不同时间,返回不同的网页. 注意:在静态网页中插入flash ,虽然flash是在动的,但是并不是说这个网页就是动态 ...

  3. Bootstrap <基础八>图片

    Bootstrap 提供了三个可对图片应用简单样式的 class: .img-rounded:添加 border-radius:6px 来获得图片圆角. .img-circle:添加 border-r ...

  4. AxureRP8实战手册(基础21-30)

    AxureRP8实战手册(基础21-30) 本文目录 基础21.     设置元件默认选中/禁用 基础22.     设置单选按钮唯一选中 基础23.     设置元件不同状态时的样式 基础24.   ...

  5. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  6. Bootstrap <基础三十一>插件概览

    在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...

  7. Bootstrap <基础三十>Well

    Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...

  8. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  9. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

随机推荐

  1. cordova

    cordova 1.安装 nodejs => node -v2.安装 npm install -g cordova => cordova -v3.安装 jdk 环境变量:(系统变量) 新建 ...

  2. ImageSwitcher自定意效果+定时切换图片

    Activity实现 1 import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; ...

  3. 安装VS2010水晶报表插件

    Visual Studio 2010默认不带水晶报表,需要安装一个水晶报表插件,首先下载此插件: http://downloads.businessobjects.com/akdlm/cr4vs201 ...

  4. excel、csv、txt文件数据读取

    /// <summary> /// 读取Excel表每一行第一列的字符串集合 /// </summary> /// <param name="filePath& ...

  5. 在Salesforce中添加Workflow Rule

    在Salesforce中可以添加Workflow Rule来执行特定的动作,比如说:当Object的某个字段发生变化时,根据变化的值去修改其他field,和Trigger的功能很类似,不过Trigge ...

  6. Codeforces Round #14 D. Two Paths(求树上两条不相交的路径的乘积最大值)

    题目链接:  http://codeforces.com/problemset/problem/14/D 思路:直接枚举每一天路径的两端,然后求以每一端为树根的树上最长路径,然后相乘就可以了. # ...

  7. ios 距离传感器和摇一摇

    //距离传感器,以注册通知的形式来实现的 #import "ViewController.h" @interface ViewController () @end @impleme ...

  8. SurfaceView

    我们先来看下官方API对SurfaceView的介绍 SurfaceView的API介绍 Provides a dedicated drawing surface embedded inside of ...

  9. 【前台页面 BUG】回车按钮后,页面自动跳转

    点击回车按钮后,页面自动的迅速跳转 原因: 表单隐式提交了. 解决方法: 在方法执行完成后,加上return false; 代码如下: /** * 注册按钮的点击事件 */ $("#regi ...

  10. 到程序集里取DLL

    C:\Windows\assembly\gac_msil