所以我試圖將NSRect轉換爲CGRect。我使用了NSRectToCGRect()
,它可以很好地複製所有內容,但不考慮y軸原點。NSRect vs CGRect:y軸反轉
問題:(0,0)的CGRect原點在左上角。 NSRect原點(0,0)在左下方。
因此,NSRect (0,0,100,100)
框位於屏幕的左下方,而CGRect (0,0,100,100)
框位於屏幕的左上角。
我必須通過基本的數學修正的Y原點的黑客:
fixedOriginY = screenHeight - NSRect.size.height - NSRect.origin.y
這樣的NSRect (0,0,100,100)
相當於實際上是CGRect (0,800,100,100)
(我900px高度MBA)。不過我不喜歡這樣,我有一種感覺會打破/視網膜問題或未來的併發症。
有沒有人有解決方案或想法如何正確轉換NSRect CGREct?
是什麼讓你認爲CoreGraphics的起源在左上角?我只能立即找到它的間接引用,但請參閱http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html - 搜索文本「使用默認座標系由Core Graphics框架是基於LLO的。「 (LLO =左下角原點) – Tommy
NSWindow框架屬性是一個NSRect,所以我把它放在0,0(左下角的屏幕)。我將該幀轉換爲CGRect,使用CGDisplayCreateImageForRect(顯示[0],windowCGRect)截圖。屏幕截圖位於屏幕的左上角。 – user339946
不要認爲它是'CGRect'和'NSRect'之間的區別。它們都只是簡單的結構,它們的值僅相對於某個座標系(不論是提供還是使用矩形的代碼)具有意義。在這種情況下,AppKit的屏幕座標系統和CG的顯示空間座標系統之間的區別如[本答案](http://stackoverflow.com/a/14228817/1218876)中所述。 –