应听众点播要求,今天说说用C#做图片的缩放和剪裁,相信很多人会对这部分内容感兴趣,毕竟这个操作太实用了。

其实在GDI+中,缩放和剪裁可以看作同一个操作,无非就是原始区域的选择不同罢了。空口无凭,先看具体算法可能更好理解。

/// <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 KiResizeImage(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 KiCut(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; } }

注意到区别了吗?提示,g.DrawImage中第二个new Rectangle。

目标其实都是new Rectangle(0, 0, iWidth, iHeight),缩放算法把整个原始图都往目标区域里塞new Rectangle(0, 0, bmp.Width, bmp.Height),而剪裁只是把原始区域上等宽等高的那个区域new Rectangle(StartX, StartY, iWidth, iHeight)1:1的塞到目标区域里。很容易吧。

C#图片处理之:图片缩放和剪裁相关推荐

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

    C#实现缩放和剪裁图片的方法.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  2. PHP图片裁剪_图片缩放_PHP生成缩略图

    2019独角兽企业重金招聘Python工程师标准>>> 在制作网页过程中,为了排版整齐美观,对网页中的图片处理成固定大小尺寸的图片,或是要截去图片边角中含有水印的图片,对于图片量多, ...

  3. 关于图片按比例自适应缩放

    今天在看视觉规范的时候,大高走过来说 帮他们那边看一个问题.又是一个关于自适应的问题.不过,我喜欢.瞄了一下,需求是这样的:用户上传照片,照片的尺寸未知:需要生成一个预览,这个预览图 要根据提供给用户 ...

  4. ImageUtils.java:图片处理工具类[裁剪/图片水印/文字水印/缩放补白/Base64加密解密]

    用到的jar包: commons-beanutils-1.8.0.jar commons-codec-1.10.jar package com.zhenzhigu.commons.util;   im ...

  5. PHP实现图片的等比缩放和Logo水印功能示例

    文章来自于:脚本之家 文章链接:https://www.jb51.net/article/112909.htm 这篇文章主要介绍了PHP实现图片的等比缩放和Logo水印功能,结合实例形式分析了php图 ...

  6. android 横向滚动图片,Android使用Photoview实现图片左右滑动及缩放功能

    Android使用Photoview实现图片左右滑动及缩放功能 发布时间:2020-10-12 14:51:12 来源:脚本之家 阅读:119 作者:kuaizilanqiu 我想,不管是做什么样的a ...

  7. C#开发自动照片(图片)裁剪(缩放)工具

    1.需求分析 用winform窗体程序,开发一个能够自动.批量对图片进行缩放和裁剪的程序. 原本想直接从网上找类型的工具直接用,但是无奈现在网上能找到的工具,要么不能用,要么就是很 恶心的下载完后还有 ...

  8. layer.photos 查看本地图片,并实现缩放和旋转功能

    公司用了layui这个框架,需要用到展示图片这个功能,千辛万苦终于实现啦!!!记录一下 后端: 1.controller(我这边是直接从前端传递来图片地址) @Log(title = "查看 ...

  9. Python OpenCV:利用滚动条移动图片,利用鼠标缩放图片

    Python OpenCV:利用滚动条移动图片,利用鼠标缩放图片 一.实现目标 二.实现背景 三.实现方法 四.运行环境 五.运行代码 六.运行结果 七.不足 八.参考 一.实现目标   在OpenC ...

最新文章

  1. CDCN 活体检测笔记
  2. 不要再次进行阅读的计算机论文与理由(持续更新中)
  3. 每天学点Linux命令:倒叙打印文件第二行的前100个大写字母
  4. Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析
  5. 计算文档中不同单词出现的次数
  6. Vue-CLI and Leaflet (9): 点聚合 Leaflet.markercluster
  7. 【Leetcode】Remove Duplicates from Sorted Array II
  8. MS SQL中查看text,ntext,image类型数据
  9. curl 命令-接口测试
  10. 【洛谷P1774】最接近神的人_NOI导刊2010提高(02)(模版题---求逆序对数目+离散化---树状数组/权值线段树)
  11. CAN FD实战之CAN FD应用领域及CAN迁移至CAN FD的策略
  12. 华为交换机命令 端口速率_华为交换机看端口速率
  13. Android Studio Design界面不显示控件的解决方法
  14. C# 串口通讯 串口调试助手源码
  15. python中test是什么意思_Python unittest 之一: 什么是单元测试
  16. 从零开始搭建自己的云服务器
  17. VerilogHDL二分频代码
  18. winform ui 设计参考
  19. spss 自动线性建模
  20. Unity虚拟相机Cinemachine教程

热门文章

  1. 案例-分页按钮(CSS3)
  2. mysql之解决“mysql server has gone away“的问题
  3. python语言与c语言相比在分支结构上有什么不同_C语言顺序结构和分支结构总结...
  4. 前后端交互总结2:使用PHP进行表单数据上传与更新
  5. Kotlin系列之枚举类
  6. 获取TextView每行的内容 (涉及getLineCount为0,getLineEnd问题)
  7. Spring系列(一):Spring的基本概念及其核心
  8. Maxwell数据库数据采集-大数据week12-DAY1-Maxwell
  9. cas导入Eclipse中
  10. Linux命令解释之rpm