给定从
返回的CGDirectDisplayIDCGError error = CGGetActiveDisplayList(8, directDisplayIDs, &displayCount);
对于Retina MacBook Pro上的内置屏幕,我希望使用
获取原生像素尺寸size_t pixelWidth = CGDisplayPixelsWide(directDisplayID);
size_t pixelHeight = CGDisplayPixelsHigh(directDisplayID);
但是,这些调用仅返回当前所选模式的尺寸。如果我改变屏幕分辨率,我会得到不同的值。我希望在15" RMBP。
如何获取Retina MacBook Pro屏幕的原生像素尺寸?
答案 0 :(得分:1)
我认为最好的方法是枚举所有显示模式(包括1x模式)并找到最大的1x模式尺寸。
您可以使用CGDisplayCopyAllDisplayModes()
并将映射到kCGDisplayShowDuplicateLowResolutionModes
的密钥kCFBooleanTrue
的字典作为options
传递给所有模式。您可以测试CGDisplayModeGetPixelWidth()
是否等于CGDisplayModeGetWidth()
,以确定哪些是1x。
答案 1 :(得分:1)
IdentityDbContext
可以告诉您一些显示信息。原始分辨率设置为CGDisplayModeGetIOFlags
。以下将把kDisplayModeNativeFlag
设置为窗口ns
当前屏幕的原始分辨率。
win
答案 2 :(得分:0)
我会走另一条路。我不是查找屏幕尺寸,而是获取正在运行程序的设备型号,然后将型号与其屏幕尺寸进行比较。编程型号和相应的屏幕尺寸可能会很繁琐,但这是我能想到的唯一方法。希望这可以帮助。
答案 3 :(得分:0)
如果使用NSScreen
是一个选项,您可以在OSX 10.7中执行类似的操作:
NSRect framePixels = [screen convertRectToBacking:[screen frame]];
其中framePixels.size
是您的显示器的像素分辨率,screen
是指向NSScreen
的指针。例如,此代码会将所有活动显示的像素分辨率打印到控制台:
for (NSScreen* screen in [NSScreen screens])
{
NSRect framePixels = [screen convertRectToBacking:[screen frame]];
NSLog(@"framePixels: (%f, %f)", framePixels.size.width, framePixels.size.height);
}
答案 4 :(得分:0)
system_profiler SPDisplaysDataType | grep Resolution:
在两台显示机器上,我得到以下输出:
Resolution: 2880 x 1800 Retina
Resolution: 2560 x 1440 (QHD/WQHD - Wide Quad High Definition)
我从类似的问题中听说过:How to get the physical display resolution on MacOS?