知识大全 不同映射模式下的直线输出的效果问题

Posted

篇首语:大直若屈,大巧若拙,大辩若讷。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 不同映射模式下的直线输出的效果问题相关的知识,希望对你有一定的参考价值。

 在做打印预览时 发现有趣的现象

   打印预览时宽度设置为 mm的线与设置为 mm的线显示效果一样 无区别 打印机输出正常 打印预览时 相同宽度的线有些显示有些不显示 打印机输出正常

  仔细查看了一下 实际上是映射模式下的显示问题 鉴于映射模式总是让人焦头烂额 值得总结一下

  开始分析 第一步 写一个MM_TEXT模式的例子 打印 条竖线 宽度由 递增

     dc SetMapMode(MM_TEXT);   for(int ii= ;ii<= ;ii++)        CPen pen;      pen CreatePen(PS_SOLID ii RGB( ));      CPen *pOldPen = dc SelectObject(&pen);      dc MoveTo(xStart+xInterval*ii );      dc LineTo(xStart+xInterval*ii xLineLen);      dc SelectObject(&pOldPen);         当然 会输出不同宽度的 条线   很正常 映射模式是像素为单位

  第二步 模拟一下打印预览下的模式( mm的方式)

     long lLogInch = ;   dc SetMapMode(MM_ANISOTROPIC);   dc SetWindowExt(lLogInch lLogInch);    dc SetViewportExt(dc GetDeviceCaps(LOGPIXELSX) dc GetDeviceCaps(LOGPIXELSY));     映射 个单位是 mm   同样用上面的代码输出   嘿 线一样粗 线一样粗   实际打印机输出 粗细是递增的 非常正常   Why?

  第三步 估计是精度问题吧?  看看新的映射模式下 每根线的实际输出像素   首先 通过long lX = dc GetDeviceCaps(LOGPIXELSX);   取得当前显示器一个英寸是等于 个像素   来 算一下   毫米 ——》 / =   毫米 ——》   毫米 ——》   毫米 ——》   毫米 ——》   毫米 ——》

  呵 很好解释了 四舍五入后 都是 像素 都是 像素   实际打印机呢? lX =   不用计算了吧 精度高 打印出来当然就OK了

  结论   由于显示器的像素点精度问题 在使用Pen进行绘制时 会进行四舍五入 如果 当前映射模式不合适 会导致应用端不同的输入在四舍五入后 得到一样的显示   解决办法 如Excel一般 不要提供太小的线宽 比如最小线宽必须是折算后的一个像素 如 / = mm

  第四步 以上规则只适用于Pen的Line绘制方法 直线还可以通过FillRect或FillSolidRect方式 并且会出现开头讲的现像 来 再试试FillSolidRect会如何

     long xStart = ;   long xLineLen = * ;   long xInterval = ;   for(int ii= ;ii<= ;ii++)       CRect rc(xStart+xInterval*ii xStart+xInterval*ii+ii+ xLineLen);     dc FillSolidRect(rc RGB( ));        结果      只显示出后四条线   为何?为啥不四舍五入了呢?

cha138/Article/program/net/201311/11339

相关参考

按照组织所面临的环境不同,可将组织的管理模式分成__

按照组织所面临的环境不同,可将组织的管理模式分成_____。A、直线管理系统B、直线-参谋系统C、科层系统D、矩阵系统答案:ABCD解析:可以按照组织所面临的不确定性和复杂性的程度将管理模式分为四种类

现代数据库的体系结构各层之间有什么关系?

  由图6—15可见,三级数据库结构之间的联系是通过二级映射或变换来实现的,即模式---存贮模式的映射和子模式----模式之间的映射。模式---存贮模式之间的映射表达了概念数据库与物理数据库之间的对应

现代数据库的体系结构各层之间有什么关系?

  由图6—15可见,三级数据库结构之间的联系是通过二级映射或变换来实现的,即模式---存贮模式的映射和子模式----模式之间的映射。模式---存贮模式之间的映射表达了概念数据库与物理数据库之间的对应

双币双股模式下的交易及交收方法

双币双股模式下的交易及交收方法“双币双股”模式指同一家发行人将可同时把其两批股份以不同交易货币(即人民币及港币)以“双币双股”模式作首次发行及上市。在双币双股模式下,所有人民币股份及港币股份必须属于相

知识大全 hibernate关系映射

  一对象关系映射基础  对象间的基本关系  首先我简要阐明一下对象之间的基本关系在这以后UML的课程中也会深入的学习对象具有的四种基本关系  关联关系关联关系在设计模式中是被提倡优先使用于继承关系的

知识大全 Hibernate如何映射枚举类型

Hibernate如何映射枚举类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题  Jav

医疗保险管理体制的模式

医疗保险管理体制的模式由于各个国家的政治、经济、文化和历史背景不同,医疗保险制度的实施和管理体制也不尽相同,从世界范围来看,各国医疗保险管理体制概括起来可分为三种模式。(一)政府调控下的医疗保险部门和

如何理解“直接收款模式”的实质?

《国家税务总局关于增值税纳税义务发生时间有关问题的公告》(国家税务总局公告2011年第40号),对“直接收款”模式下的销售收入确认作了更为明确的规定。税法规定的“直接收款模式”的实质是什么?它与预收货

发散思维是指沿着不同的方向、不同的角度思考问题,从多方面寻找答案的思维模式。根据上述定义,下列不太可能属于发散思维的是_

发散思维是指沿着不同的方向、不同的角度思考问题,从多方面寻找答案的思维模式。根据上述定义,下列不太可能属于发散思维的是_____。A、周芬认为自己在公司付出的努力比别人多,应该得到比别人更多的报酬B、