[转][C#]ImageHelper
- {
- internal static class ImageHelper
- {
- public static Bitmap CloneBitmap(Image source)
- {
- if (source == null)
- return null;
- Bitmap image = new Bitmap(source.Width, source.Height);
- image.SetResolution(source.HorizontalResolution, source.VerticalResolution);
- using (Graphics g = Graphics.FromImage(image))
- {
- g.DrawImageUnscaled(source, , );
- }
- return image;
- // this can throw OutOfMemory when creating a grayscale image from a cloned bitmap
- // return source.Clone() as Bitmap;
- }
- public static void Save(Image image, Stream stream)
- {
- Save(image, stream, ImageFormat.Png);
- }
- public static void Save(Image image, string fileName, ImageFormat format)
- {
- using (FileStream stream = new FileStream(fileName, FileMode.Create))
- {
- Save(image, stream, format);
- }
- }
- public static void Save(Image image, Stream stream, ImageFormat format)
- {
- if (image == null)
- return;
- if (image is Bitmap)
- image.Save(stream, format);
- else if (image is Metafile)
- {
- Metafile emf = null;
- using (Bitmap bmp = new Bitmap(, ))
- using (Graphics g = Graphics.FromImage(bmp))
- {
- IntPtr hdc = g.GetHdc();
- emf = new Metafile(stream, hdc);
- g.ReleaseHdc(hdc);
- }
- using (Graphics g = Graphics.FromImage(emf))
- {
- g.DrawImage(image, , );
- }
- }
- }
- public static byte[] Load(string fileName)
- {
- if (!String.IsNullOrEmpty(fileName))
- return File.ReadAllBytes(fileName);
- return null;
- }
- public static Image Load(byte[] bytes)
- {
- if (bytes != null && bytes.Length > )
- {
- try
- {
- return new ImageConverter().ConvertFrom(bytes) as Image;
- }
- catch
- {
- Bitmap errorBmp = new Bitmap(, );
- using (Graphics g = Graphics.FromImage(errorBmp))
- {
- g.DrawLine(Pens.Red, , , , );
- g.DrawLine(Pens.Red, , , , );
- }
- return errorBmp;
- }
- }
- return null;
- }
- public static byte[] LoadURL(string url)
- {
- if (!String.IsNullOrEmpty(url))
- {
- using (WebClient web = new WebClient())
- {
- return web.DownloadData(url);
- }
- }
- return null;
- }
- public static Bitmap GetTransparentBitmap(Image source, float transparency)
- {
- if (source == null)
- return null;
- ColorMatrix colorMatrix = new ColorMatrix();
- colorMatrix.Matrix33 = - transparency;
- ImageAttributes imageAttributes = new ImageAttributes();
- imageAttributes.SetColorMatrix(
- colorMatrix,
- ColorMatrixFlag.Default,
- ColorAdjustType.Bitmap);
- int width = source.Width;
- int height = source.Height;
- Bitmap image = new Bitmap(width, height);
- image.SetResolution(source.HorizontalResolution, source.VerticalResolution);
- using (Graphics g = Graphics.FromImage(image))
- {
- g.Clear(Color.Transparent);
- g.DrawImage(
- source,
- new Rectangle(, , width, height),
- , , width, height,
- GraphicsUnit.Pixel,
- imageAttributes);
- }
- return image;
- }
- public static Bitmap GetGrayscaleBitmap(Image source)
- {
- Bitmap grayscaleBitmap = new Bitmap(source.Width, source.Height, source.PixelFormat);
- // Red should be converted to (R*.299)+(G*.587)+(B*.114)
- // Green should be converted to (R*.299)+(G*.587)+(B*.114)
- // Blue should be converted to (R*.299)+(G*.587)+(B*.114)
- // Alpha should stay the same.
- ColorMatrix grayscaleMatrix = new ColorMatrix(new float[][]{
- new float[] {0.299f, 0.299f, 0.299f, , },
- new float[] {0.587f, 0.587f, 0.587f, , },
- new float[] {0.114f, 0.114f, 0.114f, , },
- new float[] { , , , , },
- new float[] { , , , , }});
- ImageAttributes attributes = new ImageAttributes();
- attributes.SetColorMatrix(grayscaleMatrix);
- // Use a Graphics object from the new image
- using (Graphics graphics = Graphics.FromImage(grayscaleBitmap))
- {
- // Draw the original image using the ImageAttributes we created
- graphics.DrawImage(source,
- new Rectangle(, , grayscaleBitmap.Width, grayscaleBitmap.Height),
- , , grayscaleBitmap.Width, grayscaleBitmap.Height,
- GraphicsUnit.Pixel, attributes);
- }
- return grayscaleBitmap;
- }
- }
- }
来自:https://github.com/FastReports/FastReport
[转][C#]ImageHelper的更多相关文章
- 最全的C#图片处理帮助类ImageHelper
最全的C#图片处理帮助类ImageHelper.cs 方法介绍: 生成缩略图 图片水印处理方法 图片水印位置处理方法 文字水印处理方法 文字水印位置的方法 调整光暗 反色处理 浮雕处理 拉伸图片 滤色 ...
- C# ImageHelper
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web; ...
- WorldWind源码剖析系列:图像助手类ImageHelper
图像助手类ImageHelper封装了对各种图像的操作.该类类图如下. 提供的主要处理方法基本上都是静态函数,简要描述如下: public static bool IsGdiSupportedImag ...
- App开发流程之加密工具类
科技优家 2016-09-08 18:10 从这篇记录开始,记录的都算是干货了,都是一些编程日常的积累. 我建议先将基础的工具加入项目,后续的开发效率会呈指数增长.如果在专注功能开发过程中,才发现缺少 ...
- Devexpress
1.隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值 sValue=Table.Rows[gri ...
- DevExpress GridControl使用方法
一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...
- Winform开发框架之肖像显示保存控件的实现
我们在开发一些Winform程序的时候,除了常规的显示普通数据外,有的时候需要显示一些人员肖像或者一些车辆等物体的图片,一般这些内容较小,所以以二进制存储在数据库是一个不错的方案.但由于它们虽然很常用 ...
- The Engine Document of JustWeEngine
JustWeEngine - Android FrameWork An easy open source Android Native Game FrameWork. Github Game core ...
- JustWeTools - 自定义控件集
JustWeTools - Some useful tools 项目地址 JustWe 现在有哪些模块? View自定义控件 PaintView画图工具(包含重构压感新版) CodeView代码编辑 ...
随机推荐
- ES6 模板字符串Template String
1. 模板字符串简介: 顾名思义,模板字符串是用来定义一个模板是使用的,就像Vue,React中的template语法. 首先,先来了解一下template string的基本用法: 在ES5中,我们 ...
- C语言 进制转换
这个程序仅仅是由十进制转换为其他进制的过程,其转换的规则如下图所示. 我使用的思路:首先在除基的过程中用一个数组保存余数,然后在输出进制转换结果的时候倒序输出,并且在输出前判断余数是否大于10,如果大 ...
- AGV
AGV AGV是(Automated Guided Vehicle)的缩写,意即“自动导引运输车”,是指装备有电磁或光学等自动导引装置,它能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车 ...
- MySQL之UNION与UNION ALL
数据表中的数据如下: UNION: 可以获取books表与articles表中所有不同的title,如果两个表中title相同的只会显示一个. UNION ALL : 可以获取books表与arti ...
- 《xxx系统》质量属性战术
<xxx系统>质量属性战术 可用性:重新引入 用户每填写一份表单,表单查看中即时更新所有信息. 易用性:系统主动 对于下拉框的选项较多时,用户可先进行部分输入,系统进行实时检索显示与用户输 ...
- pytorch查看模型weight与grad
在用pdb debug的时候,有时候需要看一下特定layer的权重以及相应的梯度信息,如何查看呢? 1. 首先把你的模型打印出来,像这样 2. 然后观察到model下面有module的key,modu ...
- [ 随手记 2 ] C/C++ 数组/指针/传数组到函数/指针数组/数组指针
1.=================================================================== 1,数组是一块内存连续的数据.2,指针是一个指向内存空间的变 ...
- string 迭代器
#include <iostream>#include <string>#include<algorithm>#define m 10000000using nam ...
- 20155208徐子涵 《网络对抗技术》Web基础
20155208徐子涵 <网络对抗技术>Web基础 实验要求 Web前端HTML Web前端javascipt Web后端:MySQL基础:正常安装.启动MySQL,建库.创建用户.修改密 ...
- 不应该使用String.valueOf的场景
今天在接口中接收参数转换String时遇到一个巨大的坑,也是自己疏忽大意所致---- 事情是这样的,项目中接口的公共入参对象为Map<String,Object>,而sql中需要的参数为S ...