我正在嘗試爲我的應用程序創建一個圖像「放大鏡」,可用於檢查不同放大倍數的圖像,並且遇到了一些道路顛簸。我正在使用Quartz創建一個CGImageRef
快照,顯示我的應用程序窗口所在的顯示的選定部分。問題是,所有不同的OS X技術使用的命名法讓我感到非常困惑。在Objective-C(OS X)中,Quartz Display Services使用的「全局顯示」座標空間與Cocoa的「屏幕」座標空間相同嗎?
我使用的功能是CGDisplayCreateImageForRect(CGDirectDisplayID display, CGRect rect)
。該文檔指出CGRect rect
參數是「矩形,在顯示空間中指定,用於將部分顯示覆制到圖像中。」問題是,我在控制檯中輸出的結果並不是我期望的。我已經嘗試了很多不同的轉換,轉換,座標翻轉等等,我現在百分之百地困惑了。
所以,我想我的問題歸結爲:屏幕空間==設備空間==顯示空間,以及如何正確地轉換他或她的視圖的框架(這恰好是一個自定義無邊框窗口)座標(左下角原點)以匹配顯示器的座標(左上角原點)?
如果有人能夠讓我變直,或者指向正確的方向,我會永遠感激。謝謝!
謝謝,肯。我已經解決了所有問題(包括我的數千個「NSLog()」調用),並從頭開始修復了我的問題。我認爲我最大的問題是我有這麼多的轉換,並協調翻轉,一個會取消另一個。儘管如此,我很欣賞你的細分。我從來沒有想過邊界/框架的差異。這可能是我出錯的地方。我剩下的唯一問題是:「屏幕空間」是否等於「設備空間?」它們是否與「全球展示空間」同義呢?我開始認爲我的耳朵之間有一個很大的空間。 :-( –
「設備空間」是指像素,它的原點通常是特定於設備的,「本地顯示空間」使用點,但其原點位於特定顯示的左上角。座標空間,所有顯示器都位於其中,它的原點位於主顯示屏的左上角,「屏幕空間」是可可座標空間,其原點位於主顯示屏的左下角 –
那麼,你的解釋正是我一直在尋找的,謝謝你,百萬人, –