全栈工程师开发手册 (作者:栾鹏)
c#教程全解


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace util
{public  class 图像处理类{//image是抽象体,bitmap是具体对象对应各种格式的位图public Pen 画笔 = new Pen(Brushes.Red);public static Bitmap 图片拼接(bool 横排拼接,Size 统一大小,params Bitmap[] 原图片组){int i = 原图片组.Length;int 拼接宽度=0;int 拼接高度=0;int 总宽度 = 0;int 总高度 = 0;int 当前图片存放位置 = 0;bool 是否缩放 = true;Bitmap backgroudImg;if(统一大小.Width == 0 || 统一大小.Height ==0)是否缩放 = false;if (i == 0)throw new Exception("图片数不能够为0");if(!是否缩放){for (int j = 0; j < i; j++){if(原图片组[j].Width>拼接宽度)拼接宽度 = 原图片组[j].Width;if(原图片组[j].Height>拼接高度)拼接高度 = 原图片组[j].Height;总宽度 = 总宽度 + 原图片组[j].Width;总高度 = 总高度 + 原图片组[j].Height;}}else {拼接宽度 = 统一大小.Width;拼接高度 = 统一大小.Height;总高度 = 拼接高度 * i;总宽度 = 拼接宽度 * i;for (int j = 0; j < i; j++){  if(横排拼接)原图片组[j] = (Bitmap)原比例图片缩放((Image)原图片组[j], (float)拼接高度 / 原图片组[j].Height);else原图片组[j] = (Bitmap)原比例图片缩放((Image)原图片组[j], (float)拼接宽度 / 原图片组[j].Width);}}//创建要显示的图片对象,根据参数的个数设置宽度if(横排拼接)backgroudImg = new Bitmap(总宽度, 拼接高度);elsebackgroudImg = new Bitmap(拼接宽度,总高度);Graphics g = Graphics.FromImage(backgroudImg);//清除画布,背景设置为白色g.Clear(System.Drawing.Color.White);if (横排拼接)for (int j = 0; j < i; j++){g.DrawImage(原图片组[j], 当前图片存放位置, 0, 原图片组[j].Width, 原图片组[j].Height);当前图片存放位置 = 当前图片存放位置 + 原图片组[j].Width;}elsefor (int j = 0; j < i; j++){g.DrawImage(原图片组[j], 0, 当前图片存放位置, 原图片组[j].Width, 原图片组[j].Height);当前图片存放位置 = 当前图片存放位置 + 原图片组[j].Height;}g.Dispose();return backgroudImg;}public static Bitmap 图片裁剪(Rectangle 裁剪范围, Image 原图片){Bitmap b = new Bitmap(原图片);return  b.Clone(裁剪范围, System.Drawing.Imaging.PixelFormat.DontCare);}//Image 赋值,只是将指针传递,new bitmap()才真正赋值public static Image 图片缩放(Image 原图片, int 新宽, int 新高){Image newImg = 原图片.GetThumbnailImage(新宽, 新高, new Image.GetThumbnailImageAbort(IsTrue), IntPtr.Zero); // 对原图片进行缩放 return newImg;GC.Collect();return newImg;}public static Image 原比例图片缩放(Image 原图片, float 缩放比例){Image newImg = 原图片.GetThumbnailImage((int)(原图片.Width * 缩放比例), (int)(原图片.Height * 缩放比例), new Image.GetThumbnailImageAbort(IsTrue), IntPtr.Zero); // 对原图片进行缩放 return newImg;GC.Collect();return newImg;}private static bool IsTrue() // 在 Image 类别对图片进行缩放的时候,需要一个返回 bool 类别的委托 { return true; }public static Image 图上添加矩形框(Image 原图片, Point 起点, Point 终点,Pen 钢笔){Graphics painter = Graphics.FromImage(原图片);//在图片的上一图层上画矩形painter.DrawRectangle(钢笔, Math.Min(起点.X, 终点.X), Math.Min(起点.Y, 终点.Y), Math.Abs(起点.X - 终点.X), Math.Abs(起点.Y - 终点.Y));GC.Collect();return 原图片;}public Image 图上添加椭圆框(Image 原图片, Point 起点, Point 终点, Color 颜色){画笔.Color = 颜色;Graphics painter = Graphics.FromImage(原图片);painter.DrawEllipse(画笔, Math.Min(起点.X, 终点.X), Math.Min(起点.Y, 终点.Y), Math.Abs(起点.X - 终点.X), Math.Abs(起点.Y - 终点.Y));GC.Collect();return 原图片;}public Image 图上添加实心矩形(Image 原图片, Point 起点, Point 终点, Color 颜色, int 透明度){Graphics painter = Graphics.FromImage(原图片);painter.FillRectangle(new SolidBrush(Color.FromArgb(透明度, 颜色.R, 颜色.G, 颜色.B)), (int)Math.Min(起点.X, 终点.X), (int)Math.Min(起点.Y, 终点.Y), Math.Abs(起点.X - 终点.X), Math.Abs(起点.Y - 终点.Y));GC.Collect();return 原图片;}public Image 屏幕截图(Point 起点, Point 终点){Image img = new Bitmap(Math.Abs(起点.X - 终点.X), Math.Abs(起点.Y - 终点.Y));Graphics g = Graphics.FromImage(img);g.CopyFromScreen(起点, new Point(0, 0), new Size(Math.Abs(起点.X - 终点.X), Math.Abs(起点.Y - 终点.Y)));return img;}public Image 改变图片色彩度(Image 原图片,int 颜色透明度){Bitmap img = new Bitmap(原图片);using (Bitmap bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)){using (Graphics g = Graphics.FromImage(bmp)){g.DrawImage(img, 0, 0);for (int h = 0; h < img.Height; h++){for (int w = 0; w < img.Width; w++){Color c = img.GetPixel(w, h);bmp.SetPixel(w, h, Color.FromArgb(颜色透明度, c.R, c.G, c.B));//色彩度最大为255,最小为0}}GC.Collect();return (Image)bmp.Clone();}}}public Image 图片反色(Image 原图片){Bitmap img = new Bitmap(原图片);using (Bitmap bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)){using (Graphics g = Graphics.FromImage(bmp)){//g.DrawImage(img, 0, 0);for (int h = 0; h < img.Height; h++){for (int w = 0; w < img.Width; w++){Color c = img.GetPixel(w, h);bmp.SetPixel(w, h, Color.FromArgb( 255-c.R, 255-c.G, 255-c.B));}}GC.Collect();return (Image)bmp.Clone();}}}public Image 图片裁剪(Image 原图片, Point 起点, Point 终点){Bitmap img = new Bitmap(原图片);using (Bitmap bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)){using (Graphics g = Graphics.FromImage(bmp)){//    g.DrawImage(img, 0, 0);for (int h = Math.Min(起点.Y, 终点.Y) - 1; h < Math.Max(起点.Y, 终点.Y); h++){for (int w = Math.Min(起点.X, 终点.X) - 1; w < Math.Max(起点.X, 终点.X); w++){Color c = img.GetPixel(w, h);bmp.SetPixel(w, h, Color.FromArgb(255, c.R, c.G, c.B));//色彩度最大为255,最小为0}}GC.Collect();return (Image)bmp.Clone();}}}}
}

c#图像处理、图片拼接、图片裁剪、图片缩放、图上添加形状、屏幕截图、图片反色、改变图片色彩度全解相关推荐

  1. 单通道图片转换为3通道图片,实现灰度图上添加彩色标注

    对于纯粹的单通道图片(灰度图)利用opencv是无法在图片上附加彩色标注的,这时就需要将单通道图片转换为三通道图片才行.由于图片中没有另外两个通道的数据,因此直接将已有的数据给另外两个通道就行. 注意 ...

  2. java原生的Graphics2D_背景图上添加图片

    1.初始化 public void init(){private String backgroundImgPath="背景图片位置";private String contentI ...

  3. think php 缩放图片,thinkphp图片裁剪、缩放、加水印方法

    thinkphp图片裁剪.缩放.加水印方法如下: /** * 图像的裁剪.缩放.加水印 * @param string $path 路径 * @param int $width 裁剪的宽度/限制的高度 ...

  4. Gif添加文字怎么操作?如何在线gif动图上添加文字?

    想要在gif动图上添加文字,应该怎么实现呢?很简单,只需要使用[GIF中文网]的gif加字(https://www.gif.cn/gifjiazi)功能就能实现,只需上传50M以内的gif动图,就可以 ...

  5. java 通过JLayeredPane实现背景图上添加其他控件

    通过JLayeredPane实现背景图上添加其他控件 JLayeredPane为容器添加了深度,允许组件在需要时互相重叠. JLayeredPane将深度范围按 层 划分,在同一层内又对组件按位置进一 ...

  6. R语言ggplot2可视化在箱图上添加分组样本个数

    R语言ggplot2可视化在箱图上添加分组样本个数 目录 R语言ggplot2可视化在箱图上添加分组样本个数 #数据预处理

  7. php剪裁图片,PHP实现图片裁剪与缩放的几种方法

    图片指定大小然后由php相关函数来实现图片裁剪功能,前段的js效果在这里就不介绍了,大家可以到网上找有很多这类代码,我只整理了php操作部份. 方法一  代码如下 复制代码 图片裁剪缩放函数,支持方位 ...

  8. EPUB.js 解决图片裁剪问题(缩放问题)

    在EPUB.js中,如果需要实现自动缩放,通过添加smartimages.js就可以实现图片自动缩放了,经过研究smartimages.js,发现,他可以是实现图片的缩放,但只能实现图片比需要显示的空 ...

  9. php gif裁剪,PHP实现图片裁剪与缩放的几种方法

    $start_y 起始位置Y(当选定方位模式裁剪时,此参数不起作用) * @return 裁剪图片存储路径 */ function thumb($src_file, $new_width, $new_ ...

最新文章

  1. [iOS]过渡动画之高级模仿 airbnb
  2. 编写一个可在android手机上运行的jar包
  3. 服务间调用要通过网关吗_Asp.Net Boilerplate微服务实战(二)架构解析
  4. 使用malloc创建头结点的坑
  5. #1419 : 后缀数组四·重复旋律4 (重复次数最多的连续字串)
  6. MySQL:查询条件
  7. webdriver 等待页面加载完成_Python爬虫,登陆神器Selenium等待(waits)页面加载的三种方法...
  8. 微信域名防红防屏蔽系统的原理 微信域名防屏蔽的注意点
  9. unicode字符和多字节字符的相互转换接口
  10. Windbg是一款非常好用的经典windows系统蓝屏分析修复工具
  11. 昆仑万维重磅发布AIGC全系列算法与模型,领跑未来
  12. JavaScript # 前端 js、html中的单引号、双引号及其转义使用
  13. webpack中文官网
  14. 关于linux移植碰到Resetting CPU ...的问题
  15. 华为手机备份工具备份方法与新版本不再支持备份到手机内部存储解决办法
  16. 给你一本武林秘籍,和KeeWiDB一起登顶高性能
  17. NodeJS:redis 入门级使用示例 hgetall
  18. 知名黑客“嘎吱上尉”为术后康复在网上发起筹款活动
  19. Keil5启动后弹出乱码窗口
  20. 云计算存储之什么是Ceph?听听Ceph创始人怎么说

热门文章

  1. 未来比较火的计算机领域,【火了】未来十年,中国人才最紧缺的6个专业!
  2. vue + elementui 通过父子组件实现弹框
  3. 【动态规划笔记】区间dp:合并果子
  4. Helm 3 完整教程(七):Helm 函数讲解(1)逻辑和流控制函数
  5. 将数据追加到html 表格中,【HTML】使用Jquery实现将输入数据添加至表格中
  6. 【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序
  7. 【NOI2001】【Vijos1531】食物链(并查集拓展域)
  8. app index.html,create-react-app搭建react开发环境中的public/index.html.
  9. excel php 数字科学计数_excel单元格设置技巧:这些自定义格式,你用过哪些?
  10. java 解析二进制_Java二进制指令代码解析