还记得前段时间的一篇文章写了"使用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数组的维数来做到非常多的效果,比如,给图片整体加亮,减淡等特殊处理..

转载于:https://www.cnblogs.com/carekee/articles/2220538.html

使用GDI+绘制高质量图和字体(2)相关推荐

  1. 使用GDI+绘制高质量图和字体

    对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图 ...

  2. C#使用GDI+绘制高质量图和字体

    对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图 ...

  3. C#中GDI绘制高质量平滑图形实例

    protected override void OnPaint(PaintEventArgs e)         {             try             {            ...

  4. 字体大宝库:2012年最新发布的26款高质量免费英文字体

    如今,网页设计师非常注重网页字体的运用,为了能让网站有更好的可读性和更强的吸引力,他们需要更漂亮的字体.正因为字体在网页设计中扮演着重要角色,设计师经常要花很多的时间去挑选字体.如果你正在寻找好看的免 ...

  5. 5个步骤,绘制高质量的业务流程图

    01 绘制业务流程图存在的问题 产品经理在梳理业务时,经常会用到业务流程图.绘制业务流程图,是产品经理的基本功. 然而,由于缺乏正确的方法和足够的训练,不少产品经理绘制的业务流程图,存在一些问题.这些 ...

  6. 英文手绘字体_40种免费的高质量手绘字体

    与衬线字体家族不同,这些手绘字体看起来不太严重,但是无论在何处使用它们,都倾向于给人以强烈的人文感. 手绘字体很难单独使用,但在以下情况下它们是最完美的: 如果您受到启发使您的新网页设计具有草图或手绘 ...

  7. 10 个案例分享几个 Python 可视化小技巧,助你绘制高质量图表

    作者 | 俊欣 来源 | 关于数据分析与可视化 一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质 ...

  8. 【Python】4500字、10个案例分享几个Python可视化小技巧,助你绘制高质量图表

    一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质量的图表. 同时本篇文章的第二部分是用Pytho ...

  9. 【硬核干货】4500字、10个案例分享几个Python可视化小技巧,助你绘制高质量图表...

    大家好,这里是俊欣,又是新的一周,好吧,打工人真的是太苦了 一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘 ...

最新文章

  1. MQTT初始篇笔记整理
  2. MyBatis-Plus 代码生成器
  3. 设计模式のObserver Pattern(观察者模式)----行为模式
  4. Hi3516A开发--安装交叉编译器
  5. SQL Server在存储过程中编写事务处理代码的三种方法
  6. Buildroot 龙芯1C支持指南
  7. java线程池并发_Java并发教程–线程池
  8. unity3d api 中文文档_官方文档
  9. 43 RBF神经网络
  10. 桥水基金:对中国股市自上而下的分析
  11. 浅谈JavaScript设计模式
  12. 你不是痘痘肌,你只是管不住嘴
  13. python入门基础三之流程控制
  14. 一年工作经验的java工程师从工作初到今天的所有收藏的…
  15. react按钮倒计时效果(发送验证码按钮)
  16. 2021-05-02
  17. python中的美元符号_类似美元$这个符号pyCharm2.0里怎么输入不好用呢,美元pycharm2.0,如题,键盘没任何问题,就...
  18. matlab绘制图形hold on_Matlab中的命令hold on hold off
  19. ccf论文分级_论文等级如何划分
  20. 【LeetCode系列】最长回文子串(双指针中心扩散)与可怜的小猪(老鼠毒药问题)

热门文章

  1. 问题 D: 寻求勾股数
  2. Python中利用*打印不同的三角形
  3. IntelliJ IDEA中创建MyBatis.xml模板
  4. Jenkins介绍及安装
  5. Neural Motifs: Scene Graph Parsing with Global Contex
  6. Poly Network现已支持以太坊至币安智能链及火币生态链一键跨链
  7. Chainlink预言机正式集成至币安智能链
  8. SAP License:SAP资产管理模块中的相关业务处理
  9. 接到有用数据的5个做法,让你不再头疼
  10. 后台业务管理系统原型模板/在线教育后台管理系统/客服系统/财务管理/用户管理/订单管理/教育业务后台管理/课程管理/教师管理/活动管理/文章管理/Axure高保真在线教育行业原型/Axure后台管理