`
coolszy
  • 浏览: 1412575 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C#缩放和裁剪图片

阅读更多

在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的塞到目标区域里。

分享到:
评论
1 楼 xuhongbin8888 2014-03-23  
不错,我正需要呢

相关推荐

    C#实现缩放和剪裁图片的方法示例

    本文主要介绍了C#实现缩放和剪裁图片的方法,结合实例形式分析了C#针对图片属性的缩放、裁剪等相关操作技巧。 图片缩放 图片缩放是指将原始图片按照一定的比例或尺寸进行缩放,以适应不同的显示需求。在C#中,可以...

    c#图片保存、缩放、裁剪、合成

    在C#编程中,处理图像是一项常见的任务,包括图片的保存、缩放、裁剪以及合成等操作。这些功能在各种应用程序中都有广泛的应用,比如网页设计、图像处理软件、桌面应用等。以下是对这些知识点的详细说明: 1. **...

    C# 像PS一样裁剪原图片,鼠标拖动裁剪图片

    在这个特定的项目中,我们关注的是如何实现“像PS一样裁剪原图片”,即在C#环境中模仿Photoshop的裁剪功能,允许用户通过鼠标拖动来裁剪图片。这涉及到图像的选取、坐标计算、缩放以及纠偏、亮度和对比度调整等技术...

    用c#实现的图片裁剪并保存

    本项目“用c#实现的图片裁剪并保存”聚焦于这一领域,通过扫描指定文件夹中的图片,对不符合尺寸要求的图片进行裁剪和缩放,并将处理后的图片覆盖原有的文件。以下是对这一技术实现的详细解析: 首先,我们需要引入...

    C# winForm 图片裁剪代码(用户控件)

    总之,这个C# WinForm图片裁剪用户控件是实现图像裁剪功能的一个实用工具,其设计考虑了易用性和性能,可以方便地集成到各种需要图片裁剪功能的项目中。通过学习和运用这个控件,你将能够扩展你的Windows Forms应用...

    C# WPF实现的图片处理小工具,可进行图片裁剪、缩放、涂鸦、旋转、查看图片信息、保存

    用户可以通过拖动矩形边角来调整裁剪区域,然后利用`BitmapSource`的`Crop`方法来裁剪图片。裁剪后的结果可以实时显示在`Image`控件上。 2. 图片缩放: 缩放功能可以通过设置`Image`控件的`Stretch`属性来实现。`...

    c# 处理图片源码 缩放 裁剪 等

    裁剪图片则是选取原始图片的一部分区域进行保留。同样使用`Bitmap`的`Clone()`方法,但需要指定源矩形和目标矩形: ```csharp Rectangle cropRect = new Rectangle(x, y, width, height); Bitmap croppedImage = ...

    C# 图片裁剪器(使用:Bitmap)

    通过这个工具,用户可以自由地裁剪图片,并生成指定尺寸的缩略图。在实际应用中,可能还需要添加错误处理、用户界面美化等功能,以提高用户体验。同时,对于性能要求较高的场景,可以考虑使用更高效的图像处理库,如...

    C# Asp.net编写实现图片缩放及裁剪例题,头像裁剪例题

    5. **裁剪图片**:根据用户选定的区域,使用Bitmap和Graphics类创建新的图像,只包含裁剪的部分。 6. **保存裁剪后的图片**:将裁剪后的图像保存为新的文件,并提供给用户下载或用于其他用途。 在实际开发中,我们...

    C#图片处理基本应用(裁剪,缩放,清晰度,水印)

    综上所述,C#为图片处理提供了一个强大的框架,允许开发者执行一系列复杂的图像操作,包括但不限于裁剪、缩放、清晰度调整和添加水印。掌握这些技术对于任何从事Web开发、移动应用开发或任何需要处理图像的项目都是...

    C#图片裁剪与缩放最简单的写法

    根据提供的标题、描述、标签及部分代码内容,我们可以总结出以下关于C#中图片裁剪与缩放的相关知识点。 ### C#中的图片处理基础 在C#中进行图片处理通常涉及使用`System.Drawing`命名空间下的类库。该库提供了丰富...

    C#图片剪裁例子

    总之,C#图片剪裁涉及到图像处理和GUI编程技术,通过.NET Framework提供的工具,可以轻松地实现这一功能。对于更复杂的需求,如旋转、缩放或添加滤镜效果,可以进一步研究`System.Drawing`命名空间中的其他类和方法...

    C# Winform图片缩放剪切组件

    这个组件的核心功能在于提供了一种方便的方式来缩放和裁剪图像,使得开发者无需深入理解图像处理的底层细节,就能在应用程序中实现灵活的图片操作。 首先,我们要理解什么是Winform。Winform是.NET Framework的一...

    图片保存、缩放、裁剪、合成 c#源码

    本项目标题为“图片保存、缩放、裁剪、合成 c#源码”,其重点在于利用C#进行图片的操作,包括保存、缩放、裁剪和合成。下面我们将详细探讨这些知识点。 1. **图片保存**: 在C#中,我们可以使用`System.Drawing`...

    C# 图片工具类 上传 缩放 裁剪 水印 生成缩略图

    C# 图片工具类 上传 缩放 裁剪 水印 生成缩略图

    图片处理、二维码识别生成工具c#支持图片裁剪、任意缩放 支持二维码识别和生成.zip

    这个压缩包文件"图片处理、二维码识别生成工具c#支持图片裁剪、任意缩放 支持二维码识别和生成.zip"显然包含了使用C#编写的图片处理和二维码操作的工具或库。下面我们将深入探讨这两个主要知识点。 1. 图片处理: ...

    C# 标记图片实现裁剪功能demo

    在C#编程中,图像处理是一项常见的任务,其中包括缩放、旋转和裁剪等操作。本教程将聚焦于“C# 标记图片实现裁剪功能”,通过一个实际的demo来详细阐述如何进行图片裁剪。 首先,我们需要理解C#中的图像处理库,如...

    C# 图像的缩放与旋转

    总之,C#提供了一套强大的图像处理工具,通过使用Bitmap和Graphics类,我们可以轻松地实现图像的缩放、放大、缩小和旋转等操作。理解这些基本操作对于开发涉及图像处理的应用程序至关重要。在实践中,你可能还会遇到...

Global site tag (gtag.js) - Google Analytics