C#GDI+图像处理

http://www.cnblogs.com/BLoodMaster/archive/2010/03/20/1690726.html

支持格式:BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等,几乎涵盖所有常用格式

图像类:

  1. Image类:Bitmap和Metafile的类提供功能的抽象基类。
  2. Metafile类:定义图形图元文件,图元文件包含描述一系列图形操作的记录,这些操作可以被记录(构造)和被回放(显示)
  3. 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 位

图像的输入:

  1. 窗体设计时,在属性对话框里面的Image属性设置
  2. 程序中对话框输入

程序中对话框输入:(示例)

打开对话框:


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


已重载。将文本数据添加到剪贴板中。

步骤:将数据置于剪贴板中。从剪贴板中检索 数据。

  1. 将数据置于剪贴板中

可以通过SetDataObject方法将数据置于剪贴板中,SetDataObject方法有以下三种形式的定义:


public static void SetDataObject(object);

public static void SetDataObject(object, bool );//bool 程序退出时,是否保留在剪贴板中

public static void SetDataObject(object, bool , int , int);//尝试次数及两次尝试之间的毫秒数

  1. 从剪贴板中检索数据

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)

时间: 2024-10-29 19:09:39

C#GDI+图像处理的相关文章

GDI+ 基础知识[1]

1.什么是GDI+? GDI+ (Graphics Device Interface Plus) 是一种绘图装置接口, 可将应用程序和绘图硬件分隔, 让我们能够编写与装置无关的应用程序.它可以让我们不需注意特定显示装置的详细数据, 便可在屏幕或打印机显示信息.我们可以呼叫 GDI+ 类别所提供的方法, 然后这些方法会适当地呼叫特定的装置驱动程序, 而完成绘图.而且与.NET进行了更好的融合. GDI+提供了各种丰富的图形图像处理功能;在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使

GDI+ 绘图基础-图形设备&创建Graphics对象

@1.图形设备接口 GDI+(Graphcis Device Interface Plus,图形设备接口)是Microsoft.Net中实现图形.图像及文字处理的W32API.所有的GDI+功能都包含在C#系统的System.System.Drawing.System.Drawing.Image.System.Drawing.Drawing2D和System.Drawing.Text等命名空间的各个类中,图形图像处理中常用的命名空间如下: System:包括常用基础数据类型和24个子命名空间 S

C#GDI+编程基础(一:Graphics画布类)

GDI+存在的意义:将变成与具体硬件实现细节分开. GDI+步骤:获取画布,绘制图像.处理图像 命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using System.Drawing.Drawing2D;//提供高级的二维和矢量图像功能 using System.Drawing.Imaging;//提供高级GDI+图像处理功能 using System.Drawing.Printing;//提供打印相关服务 using System.Drawing.

.Net框架与框架类库-转

http://blog.csdn.net/rrrfff/article/details/6686493 .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework类库.公共语言运行库是 .NET Framework 的基础.您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理.线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性.事实上,代码管理的概念是运行库的基本原则.以运行库为目标的代码称为托管代

.Net常用的命名空间

-----------常用的命名空间--------地狱的镰刀 System.Collections //命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. System.Collections.Generic //命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能. System.Configuration //命名空间包含提供用于处理配置数据的编程模型的类型. System.Data

ASP.Net各个命名空间及作用

(引用自hungerw的博客) 命名空间 描述 Microsoft.CSharp        支持C#语言编译和生成代码 System                            包含了基础类,用于定义类型/数组/字符串/事件/事件处理程序/异常 处理 /接口/数据类型转换/数学计算/应用程序环境管理等等. System.Coolections       包含了一组用于管理对象集合(例如列表/队列/数组/哈希表/字典等)的类 System.Data                 

.net framework类库中必须掌握的命名空间或类

Web开发常用命名空间和类. System.Collections //命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic //命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能.System.Configuration //命名空间包含提供用于处理配置数据的编程模型的类型.System.Data //命名空间提供对表示 ADO.NET 

C# (GDI+相关) 图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)

原文:C# (GDI+相关) 图像处理(各种旋转.改变大小.柔化.锐化.雾化.底片.浮雕.黑白.滤镜效果) C#图像处理   (各种旋转.改变大小.柔化.锐化.雾化.底片.浮雕.黑白.滤镜效果)     一.各种旋转.改变大小   注意:先要添加画图相关的using引用.   //向右旋转图像90°代码如下: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {   Graphics g

C#中基于GDI+(Graphics)图像处理系列之前言

前言 图像处理工具类的全部源码 完整示例程序源码下载 示例程序截图 前言 图像处理是开发工程师们学习某种语言入门时就会遇到的问题,笔者刚开始接触C#使用GDI+进行图像处理,觉得太简单了,就没有深入研究,随着工作经验的积累,踏遍若干坑以后突然觉得还是有必要将这块的知识好好总结一下,毕竟还是有一些比较冷门的知识在实际应用中给我们的程序带来更多的灵活性,比如将图片保存成jpeg时进一步控制图片的质量.怎样获取任意角度旋转后的图像.怎样获取透明图像等等. 本文后面将直接放出图像处理工具类的全部源码和示