在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#中,可以...
在C#编程中,处理图像是一项常见的任务,包括图片的保存、缩放、裁剪以及合成等操作。这些功能在各种应用程序中都有广泛的应用,比如网页设计、图像处理软件、桌面应用等。以下是对这些知识点的详细说明: 1. **...
在这个特定的项目中,我们关注的是如何实现“像PS一样裁剪原图片”,即在C#环境中模仿Photoshop的裁剪功能,允许用户通过鼠标拖动来裁剪图片。这涉及到图像的选取、坐标计算、缩放以及纠偏、亮度和对比度调整等技术...
本项目“用c#实现的图片裁剪并保存”聚焦于这一领域,通过扫描指定文件夹中的图片,对不符合尺寸要求的图片进行裁剪和缩放,并将处理后的图片覆盖原有的文件。以下是对这一技术实现的详细解析: 首先,我们需要引入...
用户可以通过拖动矩形边角来调整裁剪区域,然后利用`BitmapSource`的`Crop`方法来裁剪图片。裁剪后的结果可以实时显示在`Image`控件上。 2. 图片缩放: 缩放功能可以通过设置`Image`控件的`Stretch`属性来实现。`...
总之,这个C# WinForm图片裁剪用户控件是实现图像裁剪功能的一个实用工具,其设计考虑了易用性和性能,可以方便地集成到各种需要图片裁剪功能的项目中。通过学习和运用这个控件,你将能够扩展你的Windows Forms应用...
裁剪图片则是选取原始图片的一部分区域进行保留。同样使用`Bitmap`的`Clone()`方法,但需要指定源矩形和目标矩形: ```csharp Rectangle cropRect = new Rectangle(x, y, width, height); Bitmap croppedImage = ...
通过这个工具,用户可以自由地裁剪图片,并生成指定尺寸的缩略图。在实际应用中,可能还需要添加错误处理、用户界面美化等功能,以提高用户体验。同时,对于性能要求较高的场景,可以考虑使用更高效的图像处理库,如...
5. **裁剪图片**:根据用户选定的区域,使用Bitmap和Graphics类创建新的图像,只包含裁剪的部分。 6. **保存裁剪后的图片**:将裁剪后的图像保存为新的文件,并提供给用户下载或用于其他用途。 在实际开发中,我们...
综上所述,C#为图片处理提供了一个强大的框架,允许开发者执行一系列复杂的图像操作,包括但不限于裁剪、缩放、清晰度调整和添加水印。掌握这些技术对于任何从事Web开发、移动应用开发或任何需要处理图像的项目都是...
根据提供的标题、描述、标签及部分代码内容,我们可以总结出以下关于C#中图片裁剪与缩放的相关知识点。 ### C#中的图片处理基础 在C#中进行图片处理通常涉及使用`System.Drawing`命名空间下的类库。该库提供了丰富...
总之,C#图片剪裁涉及到图像处理和GUI编程技术,通过.NET Framework提供的工具,可以轻松地实现这一功能。对于更复杂的需求,如旋转、缩放或添加滤镜效果,可以进一步研究`System.Drawing`命名空间中的其他类和方法...
这个组件的核心功能在于提供了一种方便的方式来缩放和裁剪图像,使得开发者无需深入理解图像处理的底层细节,就能在应用程序中实现灵活的图片操作。 首先,我们要理解什么是Winform。Winform是.NET Framework的一...
本项目标题为“图片保存、缩放、裁剪、合成 c#源码”,其重点在于利用C#进行图片的操作,包括保存、缩放、裁剪和合成。下面我们将详细探讨这些知识点。 1. **图片保存**: 在C#中,我们可以使用`System.Drawing`...
C# 图片工具类 上传 缩放 裁剪 水印 生成缩略图
这个压缩包文件"图片处理、二维码识别生成工具c#支持图片裁剪、任意缩放 支持二维码识别和生成.zip"显然包含了使用C#编写的图片处理和二维码操作的工具或库。下面我们将深入探讨这两个主要知识点。 1. 图片处理: ...
在C#编程中,图像处理是一项常见的任务,其中包括缩放、旋转和裁剪等操作。本教程将聚焦于“C# 标记图片实现裁剪功能”,通过一个实际的demo来详细阐述如何进行图片裁剪。 首先,我们需要理解C#中的图像处理库,如...
总之,C#提供了一套强大的图像处理工具,通过使用Bitmap和Graphics类,我们可以轻松地实现图像的缩放、放大、缩小和旋转等操作。理解这些基本操作对于开发涉及图像处理的应用程序至关重要。在实践中,你可能还会遇到...