C#GDI+图像处理
http://www.cnblogs.com/BLoodMaster/archive/2010/03/20/1690726.html
支持格式:BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等,几乎涵盖所有常用格式
图像类:
- Image类:Bitmap和Metafile的类提供功能的抽象基类。
- Metafile类:定义图形图元文件,图元文件包含描述一系列图形操作的记录,这些操作可以被记录(构造)和被回放(显示)
- Bitmap类:封装GDI+位图,此位图由图形图像及其属性的像素数据组成,Bitmap是用于处理由像素数据定义的图像的对象。
常用属性以及方法:
名称 |
说明 |
公共属性 |
|
Height |
获取此Image对象的高度。 |
RawFormat |
获取此Image对象的格式。 |
Size |
获取此Image对象的宽度和高度。 |
Width |
获取此Image对象的宽度。 |
公共方法 |
|
GetPixel |
获取此Bitmap中指定像素的颜色。 |
MakeTransparent |
使默认的透明颜色对此Bitmap透明。 |
RotateFlip |
旋转、翻转或者同事旋转和翻转Image对象。 |
Save |
将Image对象以指定的格式保存到指定的Stream对象。 |
SetPixel |
设置Bitmap对象中指定像素的颜色。 |
SetPropertyItem |
将指定的属性项设置为指定的值。 |
SetResolution |
设置此Bitmap的分辨率。 |
构造BitMap实例:
public Bitmap(Image ); //从现有图像创建,其中可换成等效参数 public Bitmap(int, int); public Bitmap(Image, bool );//bool:颜色校正标志位 public Bitmap(Type , string );//type提取资源的类, string 资源名 public Bitmap(int , int , PixelFormat );// PixelFormat像素格式 枚举 public Bitmap(int , int , Graphics);// Graphics设置分辨率 public Bitmap(int , int , int stride, PixelFormat , IntPtr );// stride 指定相邻扫描行开始处之间字节偏移量的整数。传递给此参数的值必须为4 的倍数。IntPtr指向包含像素数据的字节数组的指针。 |
PixelFormat枚举:
名称 |
说明 |
DontCare = 0 |
没有指定像素格式 |
Undefined = 0 |
未定义像素格式 |
Max = 15 |
此枚举的最大值 |
Indexed = 65536 |
该像素数据包含颜色索引值,这意味着这些值是系统颜色表中颜色的索引,而不是单个颜色值。 |
Gdi = 131072 |
像素数据包含 GDI 颜色 |
Format16bppRgb555 = 135173 |
指定格式为每像素 16 位;红色、绿色和蓝色分量各使用 5 位。剩余的 1 位未使用 |
Format16bppRgb565 = 135174 |
指定格式为每像素 16 位;红色分量使用 5 位,绿色分量使用 6 位,蓝色分量使用 5 位 |
Format24bppRgb = 137224 |
指定格式为每像素 24 位;红色、绿色和蓝色分量各使用 8 位 |
Format32bppRgb = 139273 |
指定格式为每像素 32 位;红色、绿色和蓝色分量各使用 8 位。剩余的 8 位未使用 |
Format1bppIndexed = 196865 |
指定像素格式为每像素 1 位,并指定它使用索引颜色。因此颜色表中有两种颜色 |
Format4bppIndexed = 197634 |
指定格式为每像素 4 位而且已创建索引 |
Format8bppIndexed = 198659 |
指定格式为每像素 8 位而且已创建索引。因此颜色表中有 256 种颜色 |
Alpha = 262144 |
像素数据包含没有进行过自左乘的 alpha 值 |
Format16bppArgb1555 = 397319 |
像素格式为每像素 16 位。该颜色信息指定 32,768 种色调,其中 5 位为红色,5 位为绿色,5 位为蓝色,1 位为 alpha |
PAlpha = 524288 |
像素格式包含自左乘的 alpha 值 |
Format32bppPArgb = 925707 |
指定格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。根据 alpha 分量,对红色、绿色和蓝色分量进行自左乘 |
Extended = 1048576 |
保留 |
Format16bppGrayScale = 1052676 |
像素格式为每像素 16 位。该颜色信息指定 65536 种灰色调 |
Format48bppRgb = 1060876 |
指定格式为每像素 48 位;红色、绿色和蓝色分量各使用 16 位 |
Format64bppPArgb = 1851406 |
指定格式为每像素 64 位;alpha、红色、绿色和蓝色分量各使用 16 位。根据 alpha 分量,对红色、绿色和蓝色分量进行自左乘 |
Canonical = 2097152 |
默认像素格式,每像素 32 位。此格式指定 24 位颜色深度和一个 8 位 alpha 通道 |
Format32bppArgb = 2498570 |
指定格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位 |
Format64bppArgb = 3424269 |
指定格式为每像素 64 位;alpha、红色、绿色和蓝色分量各使用 16 位 |
图像的输入:
- 窗体设计时,在属性对话框里面的Image属性设置
- 程序中对话框输入
程序中对话框输入:(示例)
打开对话框:
OpenFileDialog ofdlg = new OpenFileDialog(); ofdlg.Filter = "BMP File(*.bmp)|*.bmp"; if (ofdlg.ShowDialog() == DialogResult.OK) { Bitmap image = new Bitmap(ofdlg.FileName); } |
保存对话框:
string str; Bitmap box1 = new Bitmap(pictureBox1.Image); SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Filter = "bmp文件(*.BMP)|*.BMP|All File(*.*)|*.*"; sfdlg.ShowDialog(); str = sfdlg.FileName; box1.Save(str); |
关于OpenFileDialog与SaveFileDialog的用法,可参考msdn相关章节。
图像格式的转换:
Bitmap对象的Save方法中的第二个参数指定了图像保存的格式。修改这个参数可对图像格式进行转换。
位图支持的格式:Imaging.ImageFormat
名称 |
说明 |
Bmp |
获取位图图像格式(BMP)。 |
Emf |
获取增强型Windows图元文件图像格式(EMF)。 |
Exif |
获取可交换图像文件(Exif)格式。 |
Gif |
获取图形交换格式(GIF)图像格式。 |
Guid |
获取表示此ImageForma 对象的Guid结构。 |
Icon |
获取Windows图标图像格式。 |
Jpeg |
获取联合图像专家组(JPEG)图像格式。 |
MemoryBmp |
获取内存位图图像格式。 |
Png |
获取W3C可移植网络图形(PNG)图像格式。 |
Tiff |
获取标签图像文件格式(TIFF)图像格式。 |
Wmf |
获取Windows图元文件(WMF)图像格式。 |
图像的拷贝与粘贴Clipboard:
常用方法:
名称 |
说明 |
Clear |
从剪贴板中移除所有数据。 |
ContainsData |
指示剪贴板中是否存在指定格式的数据,或可转换成此格式的数据。 |
ContainsImage |
指示剪贴板中是否存在 Bitmap 格式或可转换成此格式的数据。 |
ContainsText |
已重载。指示剪贴板中是否存在文本数据。 |
GetData |
从剪贴板中检索指定格式的数据。 |
GetDataObject |
检索当前位于系统剪贴板中的数据。 |
GetFileDropList |
从剪贴板中检索文件名的集合。 |
GetImage |
检索剪贴板上的图像。 |
GetText |
已重载。从剪贴板中检索文本数据。 |
SetAudio |
已重载。将WaveAudio格式的数据添加到剪贴板中。 |
SetData |
将指定格式的数据添加到剪贴板中。 |
SetDataObject |
已重载。将数据置于系统剪贴板中。 |
SetImage |
将Bitmap格式的Image添加到剪贴板中。 |
SetText |
已重载。将文本数据添加到剪贴板中。 |
步骤:将数据置于剪贴板中。从剪贴板中检索 数据。
- 将数据置于剪贴板中
可以通过SetDataObject方法将数据置于剪贴板中,SetDataObject方法有以下三种形式的定义:
public static void SetDataObject(object); public static void SetDataObject(object, bool );//bool 程序退出时,是否保留在剪贴板中 public static void SetDataObject(object, bool , int , int);//尝试次数及两次尝试之间的毫秒数 |
- 从剪贴板中检索数据
public static IDataObject GetDataObject(); |
图像的颜色处理:
调整分辨率:所谓分辨率就是指画面的解析度,由多少像素构成,数值越大,图像也就越清晰。
算法说明:将n*n分辨率的图像变换为m*m分辨率方法是将源图像分成n/m*n/m的子图像块,然后将该n/m*n/m子图像块的所有像素的颜色按F(i,j)的颜色值进行设定,达到降低分辨率的目的。
调整色彩:
灰化:算法说明:将彩色图像像素的颜色值分解为三基色R、G、B,求其和的平均值,然后使用SetPixel方法以该平均值参数生成图像。
灰度图像处理:根据特定的输入输出灰度转换关系,增强了图像灰度,处理后图像的中等灰度值增大,图像变亮。
颜色名 |
R值 |
G值 |
B值 |
红 |
255 |
0 |
0 |
蓝 |
0 |
0 |
255 |
绿 |
0 |
255 |
0 |
白 |
255 |
255 |
255 |
黄 |
255 |
255 |
0 |
黑 |
0 |
0 |
0 |
青 |
0 |
255 |
255 |
品红 |
255 |
0 |
255 |
颜色表:(RGB)
C#GDI+图像处理相关推荐
- GDI+图像处理前言
- C#GDI+编程基础
C#GDI+编程基础(一) C#GDI+基础(二)画刷详解 C#GDI+图像处理 转载于:https://www.cnblogs.com/halou/archive/2013/02/18/291626 ...
- Winform GDI+
什么是GDI+ GDI (Graphics Device Interface), 是属于绘图方面的 API (Application Programming Interface). 因为应用程序不能直 ...
- c#创建画布_C#GDI+编程基础(一:Graphics画布类)
GDI+存在的意义:将变成与具体硬件实现细节分开. GDI+步骤:获取画布,绘制图像.处理图像 命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using ...
- Win32 GDI 学习总结
Windows GDI 教程(一) 一个简单的绘图程序 http://www.tuicool.com/articles/jeMBZ3v 常见的图形编程库,除了 GDI 外还有 GDI+.OpenGL. ...
- MFC之GDI GDI+ 编程实例剖析
GDI和GDI+编程实例剖析 1.基本概念 GDI在Windows中定义为Graphics Device Interface,即图形设备接口,是Windows API(Application Pro ...
- C#.Net命名空间大纲
.NET Framework 类库提供下列命名空间: ▲Microsoft.CSharp 包含支持用 C# 语言进行编译和代码生成的类. ▲Microsoft.JScript 包含支持用 JScr ...
- 微软官方的.NET Framework API 参考网址
微软官方的.NET Framework API 参考网址,值得收藏和查阅~~~ https://docs.microsoft.com/zh-cn/dotnet/api/?view=netframewo ...
- 编程大讲坛、坛坛是佳酿--编程大讲坛:C#核心开发技术从入门到精通
[书名]编程大讲坛:C#核心开发技术从入门到精通 [作者]管西京 [ISBN] 978-7-121-09043-1 [出版社]电子工业出版社 [出版日期]2009年9月 [定 价]79.80元(含光 ...
最新文章
- Active MQ 双主 和 mysql双主 方案测试
- iOS官方Sample大全
- 突破三个自我,你就不光是老板的料
- AAAI 2019 | 基于不同颗粒度语言联合训练的表示学习
- spring IOC 装配一个bean
- vs code vue 语法提示不全_Vue造轮子必备*.vue文件源码读取并高亮展示
- 小组级Windows下架设git服务器
- php session string,教你如何使用php session
- 如何设计一个完美的权限管理模块
- 13.分布式锁面试题(高频面试题)
- 华为android怎么换字体大小,华为手机设置字体大小的具体步骤
- java程序开发的简历_Java程序开发工作简历
- 实用网站汇总(不定期更新)
- Excel文件减肥修复终极办法----解决Excel文件打开慢的问题
- 一言不和就自己写了个编程语言
- c语言程序设计1253,1253c语言程序设计a(2010年1月)
- 神秘贼掉包二维码,支付宝赔偿200多,烧烤小哥为何还骂支付宝没良心?
- 基于物理的渲染PBR(二):挑战手写pbr和IBL环境光部分的见解
- java解压出来损坏_在Java中解压缩错误
- 高数--函数--初等函数
热门文章
- 借助acs来实现telnet、ssh的远程认证
- Windows Live Writer新版新功能试用
- python学习干货教程(5):#!/usr/bin/python
- 谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略
- 《NoSQL精粹》思维导图读书笔记
- java编程 反射类的使用
- ReplaceForm.cs
- 第二讲:Android系统构架分析和应用程序目录结构分析
- 水晶报表技术(12)——一个投票系统水晶报表应用
- HttpClient+Jericho HTML Parser 实现网页的抓取