我正在尝试为我的应用程序创建一个图像“放大镜”,可用于检查不同放大倍数的图像,并且遇到了一些道路颠簸。我正在使用Quartz创建一个CGImageRef
快照,显示我的应用程序窗口所在的显示的选定部分。问题是,所有不同的OS X技术使用的命名法让我感到非常困惑。在Objective-C(OS X)中,Quartz Display Services使用的“全局显示”坐标空间与Cocoa的“屏幕”坐标空间相同吗?
我使用的功能是CGDisplayCreateImageForRect(CGDirectDisplayID display, CGRect rect)
。该文档指出CGRect rect
参数是“矩形,在显示空间中指定,用于将部分显示复制到图像中。”问题是,我在控制台中输出的结果并不是我期望的。我已经尝试了很多不同的转换,转换,坐标翻转等等,我现在百分之百地困惑了。
所以,我想我的问题归结为:屏幕空间==设备空间==显示空间,以及如何正确地转换他或她的视图的框架(这恰好是一个自定义无边框窗口)坐标(左下角原点)以匹配显示器的坐标(左上角原点)?
如果有人能够让我变直,或者指向正确的方向,我会永远感激。谢谢!
谢谢,肯。我已经解决了所有问题(包括我的数千个“NSLog()”调用),并从头开始修复了我的问题。我认为我最大的问题是我有这么多的转换,并协调翻转,一个会取消另一个。尽管如此,我很欣赏你的细分。我从来没有想过边界/框架的差异。这可能是我出错的地方。我剩下的唯一问题是:“屏幕空间”是否等于“设备空间?”它们是否与“全球展示空间”同义呢?我开始认为我的耳朵之间有一个很大的空间。 :-( –
“设备空间”是指像素,它的原点通常是特定于设备的,“本地显示空间”使用点,但其原点位于特定显示的左上角。坐标空间,所有显示器都位于其中,它的原点位于主显示屏的左上角,“屏幕空间”是可可坐标空间,其原点位于主显示屏的左下角 –
那么,你的解释正是我一直在寻找的,谢谢你,百万人, –