C#图片处理---基础
简单的图片剪裁
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#图片处理---基础的更多相关文章
- JQuery移动动画实现点击按钮切换图片--JQuery基础
直接贴源码了哈,这些都是自己总结的……汗水几何?希望能帮到大家. <%@ Page Language="C#" AutoEventWireup="true" ...
- jsp动态图片页面基础
1. 什么是动态网页? 动态网页是指在服务器端运行的程序或者网页,它们会随不同客户.不同时间,返回不同的网页. 注意:在静态网页中插入flash ,虽然flash是在动的,但是并不是说这个网页就是动态 ...
- Bootstrap <基础八>图片
Bootstrap 提供了三个可对图片应用简单样式的 class: .img-rounded:添加 border-radius:6px 来获得图片圆角. .img-circle:添加 border-r ...
- AxureRP8实战手册(基础21-30)
AxureRP8实战手册(基础21-30) 本文目录 基础21. 设置元件默认选中/禁用 基础22. 设置单选按钮唯一选中 基础23. 设置元件不同状态时的样式 基础24. ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- Bootstrap <基础三十一>插件概览
在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...
- Bootstrap <基础三十>Well
Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...
- Bootstrap <基础二十九>面板(Panels)
Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
随机推荐
- makefile示例
1. 生成.so动态库 示例一: SoVer = 10010110CfgVer = 10010110 BinName = fnights.soGameName = "\"fnigh ...
- 攻城狮在路上(叁)Linux(二十八)--- 打包命令:tar
首先介绍一下tar打包命令的基本格式,下面的三种之间不能混淆. tar [-j|-z] [cv] [-f 新文件名] file1 file2 ...; tar [-j|-z] [tv] [-f 新文件 ...
- 檢查RAC狀態
1.使用srvctl工具檢查RAC當前配置和狀態 $ srvctl config database -h Displays the configuration for the database. Us ...
- 利用IdentityServer3在ASP.NET 5和Angular中实现OAuth2 Implicit Flow
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:之前介绍过的IdentityServer3虽然是基于Katana开发的,不过同样可以托 ...
- C程序设计语言习题解答
1-6 #include <stdio.h> int main(void) { printf("getchar()!=EOF is:%d\n", getchar()!= ...
- 高质量C++[转]
高质量C++/C编程指南 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 文件标识: 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001年7月24日 版 本 ...
- 解决android expandablelistview 里面嵌入gridview行数据重复问题
最近做了一个“csdn专家博客App” 当然了是android版本,在专家浏览页面,我才用了expandablelistview 组件来显示专家分类,每个分类点击之后可以显示专家的头像和名字. 很简单 ...
- CentOS VMware 配置IP小结 静态 配置 桥接 NAT
系统启动后可先ping下外网或局域网内其它机器. 如果配置虚拟机时选择的NAT上网方式,后面需要配置固定IP,请先参见VMware NAT方式下设置静态IP获得可用的IP范围和网关等信息. 先将ifc ...
- 2016.9.13 JavaScript入门之六基础函数
1.Math.random()函数: 2.math.floor(x)返回小于参数x的最大整数,即对浮点数向下取整. 例如:random本身只产生(0~1)之间的小数,random()*10 意思是产生 ...
- 判断密文加密类型hash-identifier
判断密文加密类型hash-identifier 在安全领域中,加密数据随处可见.而在这些数据中,重要的数据往往采用哈希算法进行加密.例如,Linux密码使用sha512,Windows密码采用LM ...