在GDI+中,缩放和剪裁可以看作同一个操作,无非就是原始区域的选择不同罢了。空口无凭,先看具体算法可能更好理解。
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#针对图片属性的缩放、裁剪等相关操作技巧,需要的朋友可以参考下
关于“图片保存、缩放、裁剪、合成”的示例,应用于c#,VS2008
c# 处理图片源码 缩放 裁剪 等c# 处理图片源码 缩放 裁剪 等c# 处理图片源码 缩放 裁剪 等c# 处理图片源码 缩放 裁剪 等
代码实现了扫描文件夹下面的图片,将指定大小的图片进行裁剪,缩放,并覆盖原图片。
像Photoshop一样裁剪图片,鼠标拖动裁剪, 可在进行缩放或者没有缩放的图片上进行原图按比例裁剪,操作或PS一样,按住鼠标左键拖动。 内含有纠偏算法,亮度调整,对比度调整算法。
C# Asp.net编写实现图片缩放及裁剪例题,头像裁剪例题。可以浏览图片后进行裁剪,裁剪时可以根据操作移动位置和区域,且可以缩放大小等进行裁剪操作。 自己编写了一段时间,供大家分享交流学习。
C#图片处理基本应用(裁剪,缩放,清晰度,水印)
非常经典,实现图片缩放,裁剪,合成,适合新手学习使用。
C# 图片工具类 上传 缩放 裁剪 水印 生成缩略图
图片处理、二维码识别生成工具c#支持图片裁剪、任意缩放 支持二维码识别和生成.zip
一个通用的winform图片缩放和剪裁组件。可以使用这个组件传入一个位图,传出一个用户剪裁后的位图。
所谓c#图片处理高级应,多数是基于.net framework类库完成 代码如下:using system;using system.collections.generic;using system.text;using system.io;using system.drawing;using system.drawing.drawing2d;...
C#图片处理高级应用(裁剪,缩放,清晰度,水印)
这个控件实现与.NET1.1环境中,作为一个ASP.NET控件,它可以允许用户在客户端上传一幅图像到服务器上,并在浏览器中直接对图像进行裁剪、缩放、修改成为一个web可用的图像。
处理后的三张图片在temp文件夹中 分别为2_b.jpg 2_m.jpg 2_s.jpg c#方面,结合flash插件,discuz的camera.swf插件 由于此插件值传递了FileName参数,没有文件参数,因此搁置(不会flex)
用C#编程实现图片的保存、缩放、裁剪、合成.能够很容易的帮助你
干了这么多年程序员见过写的最简单的写法 别的写法跟这个没法比 太简单啦
就是上传一个图片以后,把裁剪成固定大小或放小放大的图片一般用来做自,用于剪裁缩放比例,或指定区域剪裁图片,做为大头像,本资源全部开放源码,免费用, 有不懂的地方,请QQ:524959071,或13075650875欧先生联系 注意:不...