问题标签 [dpi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
30178 浏览

winforms - 如何在 .NET WinForms 应用程序中控制字体 DPI

我为一家小型企业创建了一个应用程序。办公室中的一些员工无法正确查看表格。原因是他们将 DPI 设置设置为 96dpi 以上。有人知道控制这种情况的方法吗?

对于所有使用过 winforms 应用程序的人来说,如何控制表单布局以使 DPI 不会影响应用程序的外观?

0 投票
1 回答
6777 浏览

.net - 支持 DPI 和默认字体更改

因此,我试图弄清楚 Form 的 AutoScaleMode 属性如何可能有助于支持具有与我的工作开发机器不同的字体或DPI的系统。

从 SDK:

AutoScaleMode 枚举

公共枚举 AutoScaleMode

默认情况下,.NET 2.0 表单使用 AutoScaleMode.Font。

所以我在我的 Windows XP、Tahoma 8 pt、96 DPI 开发机器上设计了一个示例表单。然后我试了一下

  • 14 pt Segoe UI 96 DPI 机器
  • 14 pt Segoe UI 150 DPI 机器

结果并不令人鼓舞,如您在此屏幕截图中所见:

AutoScaleMode 属性并非旨在启用 .NET 窗体以支持不同的字体或 DPI 设置。那么支持不同字体和 DPI 设置的正确方法是什么?

0 投票
1 回答
4936 浏览

.net - Graphics.MeasureString 返回与 Win32 GetTextExtent 不同的值

我一直在尝试在 C# 中找到一种方法来测量字符串的大小。在 Win32 中测量字符串的标准方法是使用 GetTextExtent。真正的目标是找到字体字符的平均宽度和高度。查找字符平均宽度的标准方法是从获取所有字母字符的宽度并除以 52 开始:

Microsoft 有一个页面列出了某些 DPI 设置下某些字体大小的平均字符宽度,我已经通过我自己对 GetTextExtent 的调用确认了它们。

  • 塔荷马 8pt, 96dpi: 13x6 像素
  • 塔霍马 9pt,96dpi: 14x7 像素
  • Segoe UI 9pt,96dpi:15x7 像素

现在我想在 .NET WinForms 下执行相同的计算。使用 Graphics.MeasureString() 我想出了代码:

不幸的是,这些值与已知的、可接受的真实值不匹配:

  • Tahoma 8pt,96dpi: 14x6 像素(14.21x6.09 像素)
  • Tahoma 9pt,96dpi: 16x7 像素(15.98x6.85 像素)
  • Segoe UI 9pt,96dpi: 17x7 像素(17.46x6.91 像素)

平均字符宽度结果还可以,但字符高度太大了约 13%。我假设额外的高度是由于高度分类的差异已更改为包括上升者和下降者。如果测量字符串太高,我尝试将其更改为:

认为现在字符串没有那么高,所以测量的高度应该更短。不,它返回的高度与包含上升器和下降器的字符串版本完全相同(尽管平均宽度稍大一些)。

这可能是什么原因,并且可以获得平均字符高度可以对平均文本高度做什么,使其与 GetTextExtent 返回的可接受值匹配?

注意:尽管获取平均字符高度的标准做法是使用 GetTextMetrics,但 GetTextExtents 返回的高度返回相同的值。

0 投票
2 回答
14734 浏览

java - 将 dpi 元数据写入 Java 中的 jpeg 图像

我正在尝试以编程方式在 Java 中设置 jpeg 图像的 dpi 元数据。图像的来源是扫描仪,所以我从 TWAIN 获得水平/垂直分辨率以及图像原始数据。我想保存此信息以获得更好的打印效果。

这是我到目前为止的代码。它将原始图像 (byteArray) 保存到 JPEG 文件中,但它忽略了我通过 IIOMetadata 指定的 X/Y 密度信息。任何建议我做错了什么?

任何其他解决方案(第三方库等)也将受到欢迎。

谢谢!

0 投票
13 回答
67130 浏览

javascript - 从 JS/CSS 检测系统 DPI/PPI?

我正在开发一种独特的应用程序,它需要根据显示的设备生成特定分辨率的图像。因此,在常规 Windows 浏览器 (96ppi)、iPhone (163ppi)、Android G1 (180ppi) 和其他设备上,输出是不同的。我想知道是否有办法自动检测到这一点。

我最初的研究似乎说不。我看到的唯一建议是在 CSS 中创建一个宽度指定为“1in”的元素,然后检查它的 offsetWidth(另请参阅如何通过 javascript 访问屏幕显示的 DPI 设置?)。有道理,但 iPhone 用这种技术骗了我,说它是 96ppi。

另一种方法可能是以英寸为单位获取显示器的尺寸,然后除以以像素为单位的宽度,但我也不知道该怎么做。

0 投票
4 回答
1163 浏览

image - 图像 DPI 解释

尝试编写 DPI 的定义导致我:

DPI(点)、PPI(点)、LPI(线)都是指同一个概念,以下简称 DPI。

DPI 是依赖于设备的测量。它说,“这是这个设备的分辨率。”

基于矢量的文件不依赖于任何一个 DPI(它们会扩展和收缩以符合特定的分辨率)。

当该基于矢量的文件被渲染为基于“位图”的格式 - (bmp,png,tiff,jpg)等......该“位图”文件以特定DPI创建以在“条带”上打印(或显示)或以特定 DPI 输出的基于“扫描线”的设备。

现在,有些人会争辩说,基于“位图”的文件中不存在 DPI。

我正在寻找 DPI 的定义,以及如何或为什么认为它不存在于位图图像中?

0 投票
4 回答
678 浏览

delphi - 您是否在高分辨率屏幕和非标准/高对比度配色方案上进行测试?

我在我的大多数机器上使用非默认的 Windows 配色方案,并且有一台笔记本电脑,其屏幕设置为 124 DPI,Windows 设置为。

我测试甚至每天使用的许多程序似乎都存在问题,例如显示非标准尺寸的控件、截断的 UI 元素、不可读的文本等。从有点烦人到(几乎)不可用的整个范围。

现在我觉得很多这些问题都是不必要的。在高分辨率屏幕上以几种配色方案运行的简单测试将显示它们,其中一些甚至非常容易纠正(例如总是使用 clWindow、clWindowText 和 clBtnFace 而不是 clWhite、clBlack 和 clSilver)。其中一些更难,比如适当的控制大小。

所以我的问题是:您是否尝试遵循 UI 指南中关于系统颜色、UI 元素的大小和间距以及字体大小和面孔的建议?对它们的合规性测试是否是您的 QA 流程的一部分?即使大多数IDE(在我的例子中是Delphi)都有面向像素的设计器,您是否甚至尝试以对话框单元而不是像素来布置表单?

[编辑]:在睡觉后重新阅读这篇文章时,我注意到这个问题可能看起来像是一个毫无结果的讨论邀请。这不是那个意思,我肯定会对帮助我创建符合 UI 界面指南的应用程序的工具感兴趣,我觉得 Delphi 让我有点失望的领域。另请参阅我自己的答案。

0 投票
3 回答
9524 浏览

c# - C# WPF 分辨率独立性?

我正在使用 C# 在 WPF 中开发地图控件。我正在使用一个画布控件,例如 400 x 200,它被分配了一个例如 2,000mx 1,000m 的地图区域。

地图的比例为: canvas_size_in_meters / real_size_in_meters

我想找到canvas_size_in_meters。

canvas.ActualWidth 以 DIU(设备独立单位)为单位给出宽度。所以,400 DIU 是 400/96 = 4,17 英寸,前提我的显示器的物理分辨率是 96 dpi。

但是,使用尺子,我发现我的显示器的物理分辨率是 87 dpi。(实际上只有少数显示器具有 96 物理 dpi)

DPI 差异 (10%) 转化为屏幕上实际地图控件宽度的 +10% 差异。

无论屏幕分辨率和 DPI 设置如何,如何准确测量 WPF 控件的大小(以英寸为单位)?

0 投票
5 回答
6669 浏览

wpf - WPF:如何在对话框单位中指定单位?

我试图弄清楚如何使用正确的对话框单元(DLU)在 WPF 中布局一个简单的对话框。


什么是对话单元?

对话框是基于用户首选字体大小的度量单位。定义一个对话单元,使平均字符为 4 个对话单元宽乘以 8 个对话单元高:

在此处输入图像描述

这意味着对话单元:

  • 用所选字体更改
  • 使用选定的 DPI 设置更改
  • 不是方形的

我花了大约两个小时在 Windows Vista 中使用各种dlu测量来确定这个示例对话框的尺寸。有人可以提供生成此对话框的相应 XAML 标记吗?

替代文字图片链接

现在诚然,我对 WPF XAML 几乎一无所知。每次我开始时,我都会受到阻碍,因为我不知道如何进行任何控制。似乎 WPF 中的所有内容都必须包含在某种面板上。有 StackPanels、FlowPanels、DockPanel、Grid等。如果您没有其中之一,则无法编译。

到目前为止,我能够提出的唯一 XAML(使用 XAMLPad):

这呈现为一个华而不实的怪物。没有任何控件放置或调整大小。我无法弄清楚如何在窗口中放置控件,也无法正确调整它们的大小。

有人可以将该屏幕截图转换为 XAML 吗?

注意:您不能测量屏幕截图。指定了所有对话单元 (dlu) 的宽度和高度。

注意: 1 个水平 DLU != 1 个垂直 DLU。水平和垂直 DLU 的大小不同。


也可以看看

碰撞: 2011 年 6 月 20 日

0 投票
6 回答
6379 浏览

delphi - Delphi:处理用户的字体偏好

我提出了获取用户 UI 字体偏好的调用(与 Borland 的硬编码选择“MS Sans Serif”相对)。

假设用户的字体偏好是:

我将所有应用程序中所有表单上所有项目的字体设置为:

问题是现在事情被切断了。按钮太小 - 太窄,太短。标签中的文本被切断等。

该表单具有它的 Scaled 属性,但这不会根据字体大小而改变。scaled 属性在序列化时根据数字“0”的高度对表单进行缩放。

我在帮助中找不到关于 Borland 打算如何支持用户的 Windows 应用程序首选项的任何内容。

如何处理用户字体偏好?

注意:我从 Embargadero 的新闻组服务器交叉发布了此内容,因为 Embargadero 的新闻服务器似乎正在死亡、审查、损坏或需要登录。


更新 1

我说的是用户的字体偏好,而不是 DPI 设置。即:想象以下语言中性伪代码:

注意:这不是我的实际代码(毕竟它是语言中性的伪代码)。但此外,您需要递归地遍历表单上的每个控件,在需要更改字体时更改字体。当字体应用了与其父字体不同的样式(例如粗体),并且不再从其父字体继承时,需要手动设置。


根据lkessler的要求,下面是从 Windows 检索用户 UI 字体首选项的代码:

相关问题