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 ...
随机推荐
- JVM_Bind:8080 的解决办法【131031】
出错情况:运行 Tomcat 时报错 含义:8080 位置显示的端口被其他进程占用 解决方法: 方法1: 开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID ...
- PHP商品秒杀计时实现(解决大流量方案)
PHP商品秒杀功能我们多半以整点或时间点为例子,这样对于php来说处理不复杂,但有一个问题就是如果流量大要如何来处理,下面我们一起来看看解决办法. 要求要有小时分钟秒的实时倒计时的显示,用户端修改日期 ...
- FrameLayout
FrameLayout是最简单的布局了. ① 所有放在布局里的控件,都按照层次堆叠在屏幕的左上角.后加进来的控件覆盖前面的控件. ② 该布局container可以用来占有屏幕的某块区域来显示单一的对象
- objective-c 遍历文件夹查看文件
#import <Foundation/Foundation.h>int main (int argc, const char * argv[]){ @autoreleasepool ...
- HTML5火焰文字特效DEMO演示---转载
只有google支持 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- Linux(centos)如何安装Zend Optimizer Zend Guard Loader
很多php开源系统都是基于Zend Optimizer的,所以我们需要先安装Zend Optimizer.但在php5.3之后Zend Optimizer被Zend Guard Loader 取代了, ...
- LoadRunner检查点学习实例
LoadRunner只会检测脚本中事务的执行状态,而实际的事务执行结果则需要通过检查点来完成. 例如一个登录事务,LR只关心事务本身的执行状态,也就是说哪怕实际操作密码错误产生登录失败的业务操作,其事 ...
- An easy problem
An easy problem Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- express-20 REST API和JSON
简介 "Web服务"是一个通用术语,指任何可以通过HTTP访问的应用程序编程界面(API); 我们的重点是提供"REST风格"的服务,与其交互要更直接得多. R ...
- wpf ,tooltip的style
<Style x:Key="MyToolTipStyle" TargetType="ToolTip"> <Setter Property=&q ...