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 ...
随机推荐
- HTTPCLIENT 学习 (1) 入门
早就如雷贯耳它的大名,却一直不曾相见,昨天下载下来,今天终于测试了一把,用的官网的QUICK START例子,来访问我自己以前开发过的WEB程序,因为这个网站恰好有一个写好的通过POST请求验证用户名 ...
- Codeforces Round #363 LRU(概率 状压DP)
状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解. #incl ...
- <转>Oracle SQL性能优化
原文链接:http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效 ...
- 如何实现Outlook 2010 下载邮件后自动删除服务器上的邮件
outlook2010---文件---信息---账户设置---选中要设置的帐号---双击点选要设置的邮箱---其他设置---高级---在服务器上保留邮件的副本---14天后删除服务器上的邮件副本,修改 ...
- 第二篇:SOUI源码的获取及编译
源代码的获取 SOUI的源码采用SVN管理. SVN:http://code.taobao.org/svn/soui2 这里主要包含两个目录:trunk 及 third-part. trunk目录保存 ...
- linux下epoll如何实现高效处理百万句柄的
linux下epoll如何实现高效处理百万句柄的 分类: linux 技术分享 2012-01-06 10:29 4447人阅读 评论(5) 收藏 举报 linuxsocketcachestructl ...
- opengl纹理映射总结
大概步骤: 1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应, ...
- 移动端-解决ios连续点击页面上移问题
引入js即可 //解决ios双击页面上移问题//在项目中测试不紧input/button这些表单控件有这个问题,p,div等也有问题,于是乎就直接在body开刀了(function(){ var ag ...
- 各种编码问题产生原因以及解决办法---------响应编码,请求编码,URL编码
响应编码 产生原因以及解决办法: 示例: package cn.yzu; import java.io.IOException; import javax.servlet.ServletExcept ...
- android应用程序如何调用支付宝接口
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...