- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
获取最有可能是投影仪或 AirPlay 显示器的 NSScreen
实例的最佳方式是什么? (甚至电视输出?)我正在编写一个演示软件,需要知道哪个屏幕最有可能代表“演示”屏幕。
我想到了一些选择:
A.如果有的话,使用第二个实例。当然,如果连接的屏幕超过两个,这显然不会产生好的结果。
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
projectorScreen = screens[1];
}
B.如果第一个屏幕不是主屏幕,请使用它。其背后的原因是,在镜像的情况下,第一个屏幕应该是像素深度最高的屏幕。
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
if(screens[0] != projectorScreen) {
projectorScreen = screens[0];
}
}
C.使用非主屏幕的最低屏幕。原因只是选择任何非主屏幕的屏幕。
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
for(NSScreen* screen in screens) {
if(screen != projectorScreen) {
projectorScreen = screen;
break;
}
}
}
D.使用 NSScreen
的 deviceDescription
字典并找到现实世界坐标中最大的屏幕。即将 NSDeviceSize 的宽度和高度除以 NSDeviceResolution ,理论上这应该产生以平方英寸为单位的面积。然而,我并不完全相信操作系统知道每个屏幕的实际尺寸。
还有其他建议吗?
虽然没有任何 100% 正确的启发法,但话又说回来,在大多数情况下选择正确的屏幕就足够了。
最佳答案
看起来选项 (D) 是最好的,但有一些变化。显然,OS X 对显示器的实际尺寸有很好的了解,您可以 get it via CGDisplayScreenSize 。然后就可以非常简单地选择最大的一个并假设它是演示屏幕。
当然,这不能准确测量投影仪,但我的非正式测试表明,该函数为每个屏幕返回相当不错的每英寸像素值:
(以上均以常数25.4毫米每英寸换算)。
这是我使用的代码:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import <ApplicationServices/ApplicationServices.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
NSArray* screens = [NSScreen screens];
CGFloat __block biggestArea = 0;
NSScreen* __block presentationScreen;
NSUInteger __block presentationScreenIndex;
[screens enumerateObjectsUsingBlock:^(NSScreen* screen,NSUInteger idx,BOOL* stop){
NSDictionary *description = [screen deviceDescription];
NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue];
CGSize displayPhysicalSize = CGDisplayScreenSize(
[[description objectForKey:@"NSScreenNumber"] unsignedIntValue]);
NSLog(@"Screen %d Physical Size: %@ ppi is %0.2f",(int) idx, NSStringFromSize(displayPhysicalSize),
(displayPixelSize.width / displayPhysicalSize.width) * 25.4f);
// there being 25.4 mm in an inch
CGFloat screenArea = displayPhysicalSize.width * displayPhysicalSize.height;
if(screenArea > biggestArea) {
presentationScreen = screen;
biggestArea = screenArea;
presentationScreenIndex = idx;
}
}];
NSLog(@"Presentation screen: index: %d %@",(int) presentationScreenIndex,presentationScreen);
}
}
关于macos - NSScreen 获取投影仪/电视输出/AirPlay 屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20474596/
我目前正在开发一个 Android 电视应用程序,但无法弄清楚如何更改当我在播放视频时离开该应用程序时出现的正在播放的卡片的图标。 这link显示我需要使用 uri 格式的字符串设置 MediaMet
[注意:这是对 earlier question 的重写这被认为是不合适的和封闭的。] 我需要对电视 (TV) 视频进行一些像素级分析。这种分析的确切性质并不相关,但它基本上涉及查看电视视频每一帧的每
我长期使用 mumudvb 和一张 dvb-t pci 卡在我的网络上流式传输电视 channel 。这工作正常,但我最近添加了另一个不如其他播放器强大的播放器,所以我想重新编码视频流。 这是我的输入
我正在尝试为 android 电视制作一个应用程序,它将使用电视 Remote 上的以下按钮:up、down、left,向右,居中/输入,home,返回。 我需要参加哪些类(class)/Activi
Paypal Rest Api 不适用于 Tizen tv,但它在 rest 客户端上运行良好。Tizen tv 中既不调用成功函数也不调用失败函数。 更改了 paypal 以外的 url,它的工作正
我想访问以下当前可用推送通知的数量: ,这里是 Android TV 模拟器图像.. 那么我怎样才能读取那个数字呢? 编辑:我不想设置任何东西。 最佳答案 您可以使用 NotificationList
我知道如何在显示键盘时在 android 移动设备中进行检测,但是如何在 android 电视或火电视上做到这一点? 最佳答案 尝试这个 fun isKeyBoardVisible() = ViewC
我有一台 3D 电视,并且觉得如果我不至少尝试让它显示我自己创作的漂亮 3D 图像,我就是在逃避自己的责任(作为极客)! 我之前已经完成了非常基本的 OpenGL 编程,因此我了解所涉及的概念 - 假
我想通过 PC 上的 Java 程序控制我的 DLNA 电视。特别是,我想: 发现局域网中是否有电视 检查它当前是否开启(第一步) 稍后向它发送一些命令(例如关闭) 我相信,我需要实现数字媒体 Con
我看到很多帖子都在展示如何使用 adb connect 连接到 Android 设备但就我而言,它不起作用... unable to connect to :5555: cannot connect
我想从一个 java 程序发送以下命令,但并不过分阅读响应。知道我该怎么做吗 下面的命令通过 CEC 命令打开电视 echo "standby 0000" | cec-client -d 1 -s "
我有一台每天自动启动的独立公共(public)信息亭电脑。它连接到高清电视,有时检测不到。我必须亲自去 PC,转到屏幕分辨率,然后按检测它的工作原理。 我的问题是如何知道我希望它显示的显示器是否已在代
如何在 Erlang/OTP v17 中查看 mnesia 表。我尝试使用 tv:start() 但外壳返回 undefined function。看起来 tv 模块不再存在。用什么来代替它? 最佳答
我目前遇到了 Facebook 实时 API 的问题。 我希望订阅用户个人资料中的一些内容,包括他们在音乐、书籍、电视和电影类别中的“喜欢”。 当我通过 FQL 和 Graph 查询时,我得到了正确的
我是一名优秀的程序员,十分优秀!