您的位置:首页 > 编程语言 > C#

c# GDI+改变图片保存时的质量

2011-12-22 16:46 471 查看
SmoothingMode.HighQuality,CompositingQuality.HighQuality,TextRenderingHint.ClearTypeGridFit等属性,使得生成的图片质量有所提高.但是默认值不能满足我们的需求.而默认的jpeg保存质量应该是在60左右.这个时候我们需要修改默认值..修改的方法就是设置定义ImageCodecInfo类和EncoderParameters类,具体的代码如下:ImageCodecInfo类则指定需要保存的格式,EncoderParameters则是EncoderParameter类的集合数组,在EncoderParameter类中使用System.Drawing.Imaging.Encoder类来制定需要呈现的方式和各种参数,例如图片质量参数,扫描方法参数,色度表参数,压缩参数,颜色深度等等.到此,大家应该明白修改图片质量的步骤和方法了.主要就是对System.Drawing.Imaging.Encoder设置,然后通过System.Drawing.Imaging.Encoder构造出来EncoderParameter类,将EncoderParameter传递给EncoderParameters数组,从而得到一个完全符合自己意愿的图片!呵呵,说了一大堆.起始代码很简单.如下:

先引入:

using System;

using System.Drawing;

using System.Drawing.Imaging;

1


2

Bitmap myBitmap;
//建立位图

3

ImageCodecInfo myImageCodecInfo;

4

Encoder myEncoder;//这个是重点类,

5

EncoderParameter myEncoderParameter;

6

EncoderParameters myEncoderParameters;

7

myBitmap
= new Bitmap( Server.MapPath("a.bmp")
);

8

//请注意这里的myImageCodecInfo声名..可以修改为更通用的.看后面

9

ImageCodecInfo myImageCodecInfo
= ImageCodecInfo.GetImageEncoders()[0];

10

myEncoder
= Encoder.Quality;

11

myEncoderParameters
= new EncoderParameters(1);

12

//
在这里设置图片的质量等级为95L.

13

myEncoderParameter
= new EncoderParameter(myEncoder,
95L);

14

myEncoderParameters.Param[0]
= myEncoderParameter;//将构建出来的EncoderParameter类赋给EncoderParameters数组

15

myBitmap.Save(Server.MapPath("ok.jpg"),
myImageCodecInfo, myEncoderParameters);//保存图片

16

myEncoderParameter.Dispose();

17

myEncoderParameters.Dispose();

18

myBitmap.Dispose();

对于这个ImageCodecInfo myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];的设置,也可以这么写.比较通用:

通过上面的设置,生成的图片效果非常不错,而最重要的是你可以通过增加EncoderParameters数组的维数来做到非常多的效果,比如,给图片整体加亮,减淡等特殊处理..

1

private
static ImageCodecInfo GetEncoderInfo(String mimeType)

2





{

3


int j;

4

ImageCodecInfo[] encoders;

5

encoders
= ImageCodecInfo.GetImageEncoders();

6


for(j
= 0; j
< encoders.Length;
++j)

7





{

8


if(encoders[j].MimeType
== mimeType)

9


return encoders[j];

10

}

11


return
null;

12

}

13


14

//调用的时候这么做..

15

myImageCodecInfo
= GetEncoderInfo("image/jpeg");

16


17

//*************
如果想知道ImageCodecInfo中的其他参数,可以做如下循环,得到结果 ******************

18


19

int
j;

20

ImageCodecInfo[] encoders;

21

encoders
= ImageCodecInfo.GetImageEncoders();

22

for(j
= 0; j
< encoders.Length;
++j)

23





{

24

Response.Write( encoders[j].MimeType
+ "<br>") ;

25

}

26
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: