惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
SegmentFault 最新的问题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Attack and Defense Labs
Attack and Defense Labs
F
Full Disclosure
Vercel News
Vercel News
N
News | PayPal Newsroom
The GitHub Blog
The GitHub Blog
H
Hacker News: Front Page
H
Heimdal Security Blog
P
Privacy International News Feed
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cisco Blogs
L
Lohrmann on Cybersecurity
D
Docker
Recent Announcements
Recent Announcements
Security Archives - TechRepublic
Security Archives - TechRepublic
人人都是产品经理
人人都是产品经理
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Proofpoint News Feed
T
Tailwind CSS Blog
C
Check Point Blog
博客园 - 叶小钗
Google Online Security Blog
Google Online Security Blog
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
S
Secure Thoughts
博客园 - Franky
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
P
Palo Alto Networks Blog
Latest news
Latest news
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Last Week in AI
Last Week in AI
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cyberwarzone
Cyberwarzone
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
Hacker News: Ask HN
Hacker News: Ask HN
T
Threatpost
T
Tenable Blog
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学

博客园 - 难得一蠢

去掉恼人的XHTML验证.. 完整linux下配置RMagick步骤 解决RMagick.so cannot open shared object问题 如何让apache支持.shtml 让apache支持include标签 安装FastCgi错误( In function `init_module': ) 解决办法 [收藏]上班族的真实写照 双截棍 C语言版 (超搞笑) [转]C++0x展望[语言核心进化] 小蠢笔记:从继承特性来看构造函数 游子的心-祝福母亲 为了车票而奔波着..... 使用GDI+绘制高质量图和字体 MSN8.0测试邀请发放 李连杰年度巨作<霍元甲>主题曲:周杰伦唱 小问题: windows组件调用失败,无法加载安装安装程序:Wbemupgd.dll 管理者,请还程序员一片净土!! Java剑 VS .NET刀 -- 东山再起(论模式)(二)【推荐】 测测你的智商--我是92,属于弱智,唉 Java剑 VS .NET刀 -- 晨袭血战(论模式)(一)【推荐】 UML利器--Rational Rose Enterprise Edition 2003 安装破解步骤
使用GDI+绘制高质量图和字体(2)
难得一蠢 · 2006-03-13 · via 博客园 - 难得一蠢

     还记得前段时间的一篇文章写了"使用GDI+绘制高质量图和字体",里面用到了SmoothingMode.HighQuality,CompositingQuality.HighQuality,TextRenderingHint.ClearTypeGridFit等属性,使得生成的图片质量有所提高..但是上周在单位的"web大头贴"里生成图片的时候,遇到了一个小问题,就是在生成Jpeg图片的时候,默认的质量有模糊的效果,无论如何调整属性都是无法达到满意的效果..查了MSDN.找到解决的办法,并且还发现了块新的桃源胜地..

      问题的地点经过筛选,确定是出在图片保存时候,BitMap.Save();,按照一般的程序流程,只需简单的BitMap.Save(string Path,ImageFormat)就可以了.但是默认值不能满足我们的需求.而默认的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
 2Bitmap myBitmap;  //建立位图         
 3ImageCodecInfo myImageCodecInfo;
 4Encoder myEncoder;//这个是重点类,
 5EncoderParameter myEncoderParameter;
 6EncoderParameters myEncoderParameters;
 7myBitmap = new Bitmap( Server.MapPath("a.bmp") );
 8//请注意这里的myImageCodecInfo声名..可以修改为更通用的.看后面
 9ImageCodecInfo myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
10myEncoder = Encoder.Quality;
11myEncoderParameters = new EncoderParameters(1);
12// 在这里设置图片的质量等级为95L.
13myEncoderParameter = new EncoderParameter(myEncoder, 95L);
14myEncoderParameters.Param[0= myEncoderParameter;//将构建出来的EncoderParameter类赋给EncoderParameters数组
15myBitmap.Save(Server.MapPath("ok.jpg"), myImageCodecInfo, myEncoderParameters);//保存图片
16myEncoderParameter.Dispose();
17myEncoderParameters.Dispose();
18myBitmap.Dispose();

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

 1private 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//调用的时候这么做..
15myImageCodecInfo = GetEncoderInfo("image/jpeg");
16
17//************* 如果想知道ImageCodecInfo中的其他参数,可以做如下循环,得到结果 ******************
18
19int j;
20ImageCodecInfo[] encoders;
21encoders = ImageCodecInfo.GetImageEncoders();
22for(j = 0; j < encoders.Length; ++j) 
23{
24    Response.Write( encoders[j].MimeType + "<br>") ;
25}

26

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