在Mac OS X上,我需要将点测量转换为像素测量。
我知道的公式是
pixel = point * resolution (in terms of dpi) / 72
我想要转换为像素的测量很少。虽然反向案件也是可能的。
如何在Cocoa或Quartz中执行此操作? 它取决于轴吗?根据点,Y轴上5个像素的平均值与X轴上的5个像素相同?或者可以安全地假设X轴和Y轴的分辨率相同?
请注意,我不想对决议做出任何假设。
答案 0 :(得分:5)
您可能不希望将任何内容转换为像素。 OS X现在适用于 points ;例如,当你绘制一个矩形时,你给它的尺寸是点,而不是像素。
OS X Quartz点与(计算机)打印点有关,但不一样 - 两者曾经相同,72点= 1“。但是所见即所得已成为屏幕像素密度增加时,屏幕上的“一些比例”和72点(注意不是像素)不是物理英寸。但是72点仍然是一个“抽象”英寸。
在OS X中,您绘制点,操作系统负责将这些点映射到屏幕上的物理像素;大致转换为一定密度的屏幕被视为72ppi(像素/英寸)或1像素/点,而更高密度的屏幕被视为144ppi或2像素/点 - 例如这些是分配给标准和Retina的ppi的屏幕截图。
如果您真的,那么需要知道您可以找到的点转换为像素,但这取决于窗口所在的屏幕。
有关所有这些的详细信息,您可以从Points Don’t Correspond to Pixels开始,然后阅读参考资料的其余 OS X高分辨率指南。如果确实需要知道的话,如何找到指向支持商店映射的内容。
HTH
答案 1 :(得分:1)
最好坚持积分。 首先,您需要知道该点的来源。视图,Windows和屏幕都有自己的坐标系。 您需要做几件事来将其转换为给定屏幕的像素网格。
首先,您需要将您的点转换为屏幕坐标。 然后到屏幕的像素网格的坐标。
您还需要找出当前的显示属性,以了解它是否是视网膜显示。 (产生很大的不同。)
所有方法都在NSView,NSWindow,NSScreen中。 所有功能都是Quartz Display服务的一部分。您将需要CGDisplay,您可能需要CGWindow。
当一个点位于与两个屏幕重叠的坐标空间中时,您还需要让您的应用观察显示配置更改的通知,并找出难点。
我留给你做其余的事情并决定你是否真的需要这个。
答案 2 :(得分:1)
当您的用户在“积分”中指定长度时,您可能会产生混淆。至于它们是否意味着大小为1/72和#34;或长度与Mac UI点相比,后者随显示分辨率而变化。
在Mac OS中,"点" 是像素,除非您处于高分辨率模式,在这种情况下,点是2x2像素。 " Points Don't Correspond to Pixels"页面说"在高分辨率显示器上,每个点有四个屏幕像素,"表示高分辨率中的4:1对应关系,以及标准分辨率中的1:1对应关系。它还指出:
注意:术语点源于印刷行业,它定义了72个点,在物理空间中等于1英寸。当用于OS X中的高分辨率时,用户空间中的点与物理世界中的测量值没有任何关系。
要在Mac点的Mac屏幕上将印刷师的磅值转换为物理尺寸相同的物体,您的公式完全正确。您可以重命名像素'到Mac点:
MacPoints = (TypesettersPoints/72)*ResolutionInDotsPerInch