600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > c#图像处理 图片拼接 图片裁剪 图片缩放 图上添加形状 屏幕截图 图片反色 改变

c#图像处理 图片拼接 图片裁剪 图片缩放 图上添加形状 屏幕截图 图片反色 改变

时间:2019-05-08 16:38:03

相关推荐

c#图像处理 图片拼接 图片裁剪 图片缩放 图上添加形状 屏幕截图 图片反色 改变

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

c#教程全解

using System;using System.Collections.Generic;using ponentModel;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#图像处理 图片拼接 图片裁剪 图片缩放 图上添加形状 屏幕截图 图片反色 改变图片色彩度全解

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。