我需要知道Linux和Mac OS上的活动屏幕DPI。我认为在linux上xlib可能很有用,但我找不到如何获得当前DPI的方法。 我希望这些信息能够以英寸为单位获得真正的屏幕尺寸。
提前致谢!
答案 0 :(得分:8)
在Mac上,使用CGDisplayScreenSize以毫米为单位获取屏幕尺寸。
答案 1 :(得分:6)
在Linux上的X中,拨打XOpenDisplay()
以获取Display
,然后将DisplayWidthMM()
和DisplayHeightMM()
与DisplayWidth()
和DisplayHeight()
一起使用计算DPI。
在Mac上,几乎可以肯定使用比X更原生的API。默认情况下Mac OS X不运行X Window,它具有原生窗口环境。
答案 2 :(得分:4)
我从xdpyinfo拼凑了这个... 编译:gcc -Wall -o getdpi getdpi.c -lX11
/* Get dots per inch
*/
static void get_dpi(int *x, int *y)
{
double xres, yres;
Display *dpy;
char *displayname = NULL;
int scr = 0; /* Screen number */
if( (NULL == x) || (NULL == y)){ return ; }
dpy = XOpenDisplay (displayname);
/*
* there are 2.54 centimeters to an inch; so there are 25.4 millimeters.
*
* dpi = N pixels / (M millimeters / (25.4 millimeters / 1 inch))
* = N pixels / (M inch / 25.4)
* = N * 25.4 pixels / M inch
*/
xres = ((((double) DisplayWidth(dpy,scr)) * 25.4) /
((double) DisplayWidthMM(dpy,scr)));
yres = ((((double) DisplayHeight(dpy,scr)) * 25.4) /
((double) DisplayHeightMM(dpy,scr)));
*x = (int) (xres + 0.5);
*y = (int) (yres + 0.5);
XCloseDisplay (dpy);
}
答案 3 :(得分:2)
您可以使用NSScreen
来获取所连接的显示器的尺寸(以像素为单位),但这不会显示显示器的物理尺寸/ PPI,事实上我认为没有任何能够可靠地执行此操作的API。
你可以问一个窗口的分辨率如下:
NSDictionary* deviceDescription = [window deviceDescription];
NSSize resolution = [[deviceDescription objectForKey:NSDeviceResolution] sizeValue];
目前,无论实际PPI如何,这都会为所有屏幕提供NSSize
{72,72}
。唯一能使这个值发生变化的是改变Quartz Debug实用程序中的缩放因子,或者Apple是否打开了与分辨率无关的UI。您可以通过调用:
[[NSScreen mainScreen] userSpaceScaleFactor];
如果你真的必须知道确切的分辨率(并且我有兴趣知道你为什么这么做),你可以创建一个屏幕校准例程,并让用户在屏幕上用实际的物理标尺测量一条线。原油,是的,但它会起作用。
答案 4 :(得分:1)
这是一种独立于平台的获取屏幕DPI的方式:
// Written in Java
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.EmptyBorder;
public final class DpiTest {
public static void main(String[] args) {
JFrame frame = new JFrame("DPI");
JLabel label = new JLabel("Current Screen DPI: " + Toolkit.getDefaultToolkit().getScreenResolution());
label.setBorder(new EmptyBorder(20, 20, 20, 20));
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
您可以从here下载已编译的jar。下载后,java -jar dpi.jar
将显示DPI。