又有一段时间没有更新了,缺少学习的热情了。今天贴几个图片处理的小技巧,希望对大家有用:
(1)如何获取.gif图片中的各个帧?
(2)如何获取图片的缩略图?
(3)如何“截取”图片的指定区域?

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

public class ImageHelper
{
    /**//// <summary>
    /// 获取图片中的各帧
    /// </summary>
    /// <param name="pPath">图片路径</param>
    /// <param name="pSavePath">保存路径</param>
    public void GetFrames(string pPath, string pSavedPath)
    {
        Image gif = Image.FromFile(pPath);
        FrameDimension fd = new FrameDimension(gif.FrameDimensionsList[0]);

        //获取帧数(gif图片可能包含多帧,其它格式图片一般仅一帧)
        int count = gif.GetFrameCount(fd);

        //以Jpeg格式保存各帧
        for (int i = 0; i < count; i++)
        {
            gif.SelectActiveFrame(fd, i);
            gif.Save(pSavedPath + "\\frame_" + i + ".jpg", ImageFormat.Jpeg);
        }
    }

    /**//// <summary>
    /// 获取图片缩略图
    /// </summary>
    /// <param name="pPath">图片路径</param>
    /// <param name="pSavePath">保存路径</param>
    /// <param name="pWidth">缩略图宽度</param>
    /// <param name="pHeight">缩略图高度</param>
    /// <param name="pFormat">保存格式,通常可以是jpeg</param>
    public void GetSmaller(string pPath, string pSavedPath, int pWidth, int pHeight)
    {
        try
        {
            Image smallerImg;
            Image originalImg = Image.FromFile(pPath);
            Image.GetThumbnailImageAbort callback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
            smallerImg = originalImg.GetThumbnailImage(pWidth, pHeight, callback, IntPtr.Zero);
            smallerImg.Save(pSavedPath + "\\smaller.jpg", ImageFormat.Jpeg);
        }
        catch (Exception x)
        {
            //
        }
    }

    /**//// <summary>
    /// 获取图片指定部分
    /// </summary>
    /// <param name="pPath">图片路径</param>
    /// <param name="pSavePath">保存路径</param>
    /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
    /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
    /// <param name="pPartWidth">目标图片的宽度</param>
    /// <param name="pPartHeight">目标图片的高度</param>
    /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
    /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
    /// <param name="pFormat">保存格式,通常可以是jpeg</param>
    public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)
    {
        Image originalImg = Image.FromFile(pPath);

        Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);   
        Graphics graphics = Graphics.FromImage(partImg);
        Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
        Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)

        graphics.DrawImage(originalImg, destRect,origRect,GraphicsUnit.Pixel);
        partImg.Save(pSavedPath + "\\part.jpg", ImageFormat.Jpeg);
    }

    public bool ThumbnailCallback()
    {
        return false;
    }
}

.NET基础示例系列之二十:对图片的几种简单处理相关推荐

  1. .NET基础示例系列之二十四:家谱软件(1)

    最近忙于摆弄Oracle方面的东西,C#的功课落下了不少,趁着还没手生,把前段时间断断续续写的WPF家谱小软件拿出来整理一下,好记性不如烂笔头,先截两张图放着,后续再写写中间一些问题.已解决的是: 1 ...

  2. .NET基础示例系列之二十三:WebRequest、WebResponse及刷票程序

    卧佛寺畔寻常路,萼新绿,香如故. 东君闲情有几许?犹寒燕赵,早春浪屿,南北各风物. 红墙紫禁春寒处,最是艰难返乡路. 羡煞东风无束缚,江南江北,无凭鳞羽,一夜即飞度. 送上一首以前写的〈青玉案〉,年年 ...

  3. Kubernetes生产实践系列之二十九:Kubernetes基础技术之容器关键技术实践

    一.前言 在文章<Kubernetes生产实践系列之二十八:Kubernetes基础技术之容器关键技术介绍>中,对于Docker容器技术依赖的namespace.cgroup和UnionF ...

  4. 【5年Android从零复盘系列之二十】Android自定义View(15):Matrix详解(图文)【转载】

    [转载]本文转载自麻花儿wt 的文章<android matrix 最全方法详解与进阶(完整篇)> [5年Android从零复盘系列之二十]Android自定义View(15):Matri ...

  5. Docker系列(二十四)——Docker实例六Docker安装Redis实例

    < Docker实例三Docker安装Redis实例 > 前言 在前面一篇文章种,完成了 < Docker安装MongoDB实例 >,本篇将继续镜像安装教程,并完成Docker ...

  6. kafka maven 依赖_SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  7. SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  8. SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用

    SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用 一.概述 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能 ...

  9. 配分函数|机器学习推导系列(二十六)

    一.概述 对于有向概率图模型来说,由于图中存在天然的拓扑排序关系,所以有向概率图的因式分解的形式很容易写出来.而对于无向图来说就需要根据它图中的最大团来写成一个因式分解的形式,无向图模型在局部并没有表 ...

最新文章

  1. 四川大学计算机学院男女生比例,川大、电子科大新生男女比例大PK 比例更佳的是……...
  2. JAVA基础复习1:开始Java世界的第一个程序
  3. 5G NR — 频率、频段、载波、载频、载波带宽
  4. 转载:【opencv入门教程之三】:图片的载入|显示|输出
  5. 博客园代码高亮显示教程
  6. Cannot convert type ‘ASP.login_aspx’ to ‘System.Web.UI.WebControls.Login’的解决方法
  7. c语言从1打印到100再打印到1该如何编写?
  8. 手把手教你用nodejs+SQL Server2012做增删改查
  9. Linux基本目录结构
  10. 一个spark receiver 或多个spark receiver 接收 多个flume agent
  11. 学习记录——背包问题基础公式解释回顾
  12. php 人像识别,基于OpenCV的PHP图像人脸识别技术
  13. 六石编程学:如何整合两个项目的代码
  14. MySQL驱动jar包的下载--保姆教程
  15. 长链接(MQTT)测试及工具MQTTX使用
  16. Oracle数据备份与恢复
  17. mysql grant priv_mysql怎么将grant priv的权限
  18. linux 搭建snmp服务器,linux snmp安装配置
  19. 基于支付宝微信通知的一种个人收款回调方案
  20. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

热门文章

  1. python3中的编码与解码
  2. [POJ3630] Phone List
  3. MSTAR GAMMA
  4. 生成 PDF 全攻略【1】初体验
  5. JMS - QueueBrowser
  6. ps -ef和ps aux的区别
  7. 数据类型的sizeof
  8. 上周热点回顾(10.1-10.7)
  9. 通用四级联动下拉列表
  10. webview检测html事件,在JavaFX WebView中检测HTML textarea onkeyup事件