查不少资料,在

 GPfont := TGPFont.Create(fontFamily,   Font.Size  , FontStyleRegular,UnitPixel  );

时,显示的字体,并不是按DPI显示,特别是同时在屏幕与打印机显示时,差异更明显

在切换 UnitPoint 能解决该问题,但是又遇到了新的问题,我想绘图后保存到文件,且需要高分辨率时,就over了

重新查看微软官方API时,发现官方API与delphi中的一致,哪说明该问题,应该是有可解决的办法。

先是试着

 GPfont := TGPFont.Create(fontFamily,   Font.Size/72*页面DPI  , FontStyleRegular,UnitPixel  ); 

结果是行不通

于是,我试着用

 GPfont := TGPFont.Create(fontFamily,   Font.Size*页面DPI  , FontStyleRegular,UnitPixel  );

时,发现屏幕显示与打印,均保持一致,就是字特别大。

到此,感觉终于找到方向,于是进一步随便除一个心理比值。

于是,我试着用

 GPfont := TGPFont.Create(fontFamily,   Font.Size*页面DPI/3  , FontStyleRegular,UnitPixel  );

显示的结果,意外的与使用UnitPoint 时相近 保存到高分辨率图片测试,效果满意,比值3是否最佳值,待进一步确认。

function GETTextWidth(FontEx: TFontEx; str: string):Single  
var
GPG:TGPGraphics;
fontFamily: TGPFontFamily;
GPfont: TGPFont;
boundingBox: TGPRectF;
origin : TGPPointF;
begin
origin.x:=;
origin.Y:=;
GPG:=TGPGraphics.Create(Canvas.Handle); GPG.SetPageUnit(UnitPixel);
   fontFamily := TGPFontFamily.Create(Font.Name);
GPfont := TGPFont.Create(fontFamily, Font.Size *DPI/ ,Font.FontStyle,UnitPixel ); //UnitPixel UnitPoint try
GPG.MeasureString(str,-,GPfont,origin,boundingBox);
Result:=boundingBox.Width-length(str)*0.065* DPI/;//取到的宽度均不够,适当减去一个值,不过还是不精确
finally
GPfont.Free;
fontFamily.Free;
GPG.Free;
end;

随手改了下工作中代码,上个取文字宽的完整代码供参考,没测试是否能运行。

DPI 值由   GetDeviceCaps(PrinterHandle, LOGPIXELSX)等相关函数取得,不再列出

DELPHI GDI + TGPFont UnitPixel 问题解决的更多相关文章

  1. Delphi GDI(一)

    Delphi 7下IGDIPlus库的使用 IGDI+是一个免费开源封装微软GDI+功能的Delphi库,该库使得可以用Delphi语言代码快速简短的实现复杂GDI+应用程序. 官方网站:http:/ ...

  2. Delphi GDI+ Library

    GDI+ LibraryThis library enables GDI+ functionality for Delphi 2009 and later. It differs from other ...

  3. Delphi GDI+ 安装方法

    [转]Delphi GDI+ 安装方法转自:万一博客(http://www.cnblogs.com/del/)GDI+ 是 Windows 的一个函数库, 来自 Windows\System32\GD ...

  4. Delphi GDI+基本用法总结

    GDI+以前只是听说过,还没怎么用过,这段时间用了用,觉得挺好用的.在这里总结一下.留个备忘. GDI+(Graphics Device Interface plus)是Windows XP中的一个子 ...

  5. Delphi+GDI

    源:Delphi 初试GDI+学习笔记 Delphi 深入GDI+学习笔记

  6. Delphi GDI对象之绘制位图

    http://www.cnblogs.com/pchmonster/archive/2012/07/06/2579334.html 绘制位图(Drawing Bitmaps) 绘制位图听起来似乎很难, ...

  7. Delphi GDI对象之绘制文本

    转载:http://www.cnblogs.com/pchmonster/archive/2012/07/06/2579185.html 基本绘图操作(Basic Drawing Operations ...

  8. delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法

    delphi 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法 若有更好的,请大神留言我也学习下,感谢! uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var  Bi ...

  9. Delphi GDI对象之剪切区域

    原文链接: http://www.cnblogs.com/pchmonster/archive/2012/07/05/2577627.html 剪切区域(Clipping Regions) Regio ...

随机推荐

  1. java+springBoot+Thymeleaf+vue分页组件的定义

    导读 本篇着重介绍java开发环境下,如何写一个vue分页组件,使用到的技术点有java.springBoot.Thymeleaf等: 分页效果图 名称为vuepagerbasic的分页组件,只包含上 ...

  2. .xxx.sh脚本无法启动,原来都是特殊字符搞的鬼?

    今天遇到个趣的问题,linux上springboot启动,连接达梦数据库报错. 解决思路: 1)是不是数据库本身有问题,客户端登录没问题. 2)排查是不是war包问题,本地连接数据库,没问题. 3)是 ...

  3. java并发编程(十四)----(JUC原子类)对象的属性修改类型介绍

    今天我们介绍原子类的最后一个类型--对象的属性修改类型: AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,AtomicReferenceFieldUp ...

  4. java swing 开发 -JTable

    最近利用空闲时间自己琢磨了一下java swing 编程,其实在从事javaweb之前我一直向往的就是java swing 开发,不知道为什么可能当时觉得Windows上的exe程序很是神奇,关于wi ...

  5. cs231n---强化学习

    介绍了基于价值函数和基于策略梯度的两种强化学习框架,并介绍了四种强化学习算法:Q-learning,DQN,REINFORCE,Actot-Critic 1 强化学习问题建模 上图中,智能体agent ...

  6. leetcode bug free

    ---不包含jiuzhang ladders中出现过的题.如出现多个方法,则最后一个方法是最优解. 目录: 1 String 2 Two pointers 3 Array 4 DFS &&am ...

  7. 面试java后端面经_3

    小姐姐说:你一点都不懂表达,一点都不懂爱情,一点也不爱我! 你答:你知道吗,我听说过一个这样的故事,讲的就是有一个小女孩和一个男孩在一起,小男孩呢很不幸是位聋哑人,虽然如此,但是他们的日子过得特别的美 ...

  8. Python爬虫运用正则表达式

    我看到最近几部电影很火,查了一下猫眼电影上的数据,发现还有个榜单,里面有各种经典和热映电影的排行榜,然后我觉得电影封面图还挺好看的,想着一张一张下载真是费时费力,于是突发奇想,好像可以用一下最近学的东 ...

  9. HTML5 storage事件监听

    引用<h5移动web开发指南>上的话: “当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发” 所以,localStorage  st ...

  10. Docker学习总结(七)--Docker私有仓库

    创建私有仓库 1) 拉取私有仓库镜像 docker pull registry 2)启动私有仓库容器 docker run -di --name-registry -p 5000:5000 regis ...