4

在 Mac OS X 上,我需要将点测量转换为像素测量。

我知道的公式是

pixel   = point * resolution (in terms of dpi) / 72

我想转换为像素的测量值很少。尽管相反的情况也是可能的。

如何在 Cocoa 或 Quartz 中做到这一点?它取决于轴吗?就点而言,Y 轴上的 5 个像素是否与 X 轴上的 5 个像素相同?或者假设 X 轴和 Y 轴的分辨率相同是否安全?

请注意,我不想对分辨率做出任何假设。

4

3 回答 3

6

您可能不想将任何内容转换为像素。OS X 现在可以点数工作;因此,例如,当您绘制一个矩形时,您是以点而不是像素给出它的尺寸。

OS X Quartz 点与(计算机)打印点相关,但不相同- 两者过去是相同的,72 点 = 1"。但是 WYSIWYG 已成为“某种比例”和 72 点(注意不是像素)屏幕上的不是物理英寸,因为屏幕像素密度增加了。但是 72 点仍然是“抽象”英寸。

在 OS X 中,您绘制点,操作系统负责将这些点映射到屏幕上的物理像素;粗略地转换为达到一定密度的屏幕被视为 72ppi(像素/英寸)或 1 像素/点,而更高密度的屏幕被视为 144ppi 或 2 像素/点 - 例如,这些是分配给标准和 Retina 的 ppi截图。

如果您真的非常需要知道一个点转换为像素的含义,您可以找到,但这取决于窗口所在的屏幕。

有关所有这些的详细信息,您可以从Points Don't Correspond to Pixels开始,然后阅读参考资料所在的 OS X 高分辨率指南的其余部分。如果您真的非常需要知道,如何找到指向后备存储映射的内容已涵盖。

高温高压

于 2013-10-31T23:36:37.247 回答
2

当您的用户以“点”为单位指定长度时,您可能会混淆它们是指大小为 1/72" 的排版点还是与 Mac UI 点相比的长度,这会随显示分辨率而变化。

在 Mac OS 中,“点”像素,除非您处于高分辨率模式,在这种情况下,点是 2x2 像素。“点与像素不对应”页面显示“在高分辨率显示器上,每个点有四个屏幕像素”,表示高分辨率为 4:1 对应,标准分辨率为 1:1。它还指出:

注意:术语点起源于印刷行业,它将 72 个点定义为等于物理空间中的 1 英寸。当用于 OS X 中的高分辨率时,用户空间中的点与物理世界中的测量没有任何关系。

要将印刷者的磅值转换为在 Mac 屏幕上以 Mac 磅为单位的物理尺寸,您的公式是完全正确的。您可以将“像素”重命名为 Mac 点:

MacPoints = (TypesettersPoints/72)*ResolutionInDotsPerInch
于 2015-01-16T11:12:05.110 回答
1

最好坚持点。首先,您需要知道该点的来源。视图、窗口和屏幕都有自己的坐标系。您需要做几件事才能将其转换为给定屏幕的像素网格。

首先,您需要将您的点转换为屏幕坐标。然后到屏幕的像素网格坐标。

您还需要找出当前的显示属性以了解它是否是视网膜显示器。(有很大的不同。)

所有的方法都在 NSView、NSWindow、NSScreen 中。所有功能都是 Quartz Display 服务的一部分。您将需要用于 CGDisplay 的那些,您可能需要用于 CGWindow 的那些。

当一个点位于与两个屏幕重叠的坐标空间中时,您还需要让您的应用程序观察显示配置更改的通知并找出困难的部分。

我留给你做剩下的事情,然后决定你是否真的需要这个。

于 2013-11-01T00:26:49.683 回答