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
先引入:
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
相关文章推荐
- c# GDI+改变图片保存时的质量
- C#中按指定质量保存图片的实例代码 24位深度
- C#中按指定质量保存图片的实例代码
- C#保存图片时提示“GDI+ 中发生一般性错误”
- fontDialog,colorDialog,saveDialog改变字体大小,颜色,以后保存图片文件实例
- C# 保存窗口为图片(保存纵断面图)
- 将图片等文件保存到sqlite中(c#)
- CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)
- OpenCV探索之路(十八):使用imwrite调整保存的图片质量
- C#截取当前屏幕界面作为图片保存
- OpenCV 改变保存图片的名称,批量处理方法
- c# 应用NPOI 获取Excel中的图片,保存至本地的算法
- c# 保存屏幕到图片中
- c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库
- c#改变图片透明度
- C# 创建EXCEL图表并保存为图片
- 怎样用 c# GDI+ 截取一张图片的一部分,然后再替换另一张图片的一部分
- C#抓取当前屏幕并保存为图片的方法
- MFC中将控件保存成图片 && MFC中利用GDI+在控件上绘图,把图像保存成图片
- 图片保存到数据库和从数据库读取图片并显示(c#)