我意识到关于使用iSight光传感器没有任何公共文档,但是像ShadowBook(在此处显示)这样的程序能够访问亮度数据,我只是想知道是否有人能够获得类似的结果并知道如何访问该传感器?谢谢!
io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController"));
然后,使用以下代码连接到服务:io_connect_t port = 0;
IOServiceOpen(service, mach_task_self(), 0, &port);
IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right);
其中left
和right
是整数,它们现在保存着传感器的光线水平。
请注意,许多IOService方法返回一个kern_return_t
变量,该变量将保存KERN_SUCCESS
,除非该方法失败。还要确保使用IOObjectRelease(service);
释放服务对象。IOConnectMethodScalarIScalarO()
似乎已被弃用。
改为使用:uint32_t outputs = 2;
uint64_t values[outputs];
IOConnectCallMethod(port, 0, nil, 0, nil, 0, values , &outputs, nil, 0);
values[0]
和values[1]
中。请注意,并非所有的MacBook都是这样工作的:在我的2010年中期15英寸Pro上,两个值是相同的,因为光感传感器位于iSight摄像头中。
NSLog(@"right %f", values);
?我该如何格式化左/右? - Grant WilkinsonNSLog(@"Left:%i, Right:%i", (int)values[0], (int)values[1]);
即可。我认为使用values
作为数组可以解决数字不更新的问题。如果还有问题,我可以给你发送一个我制作的快速示例。 - wquist