Also ich versuche, ein NSRect zu einem CGRect zu konvertieren. Ich benutzte NSRectToCGRect()
, die alles über fein kopiert, aber y-Ursprungsachse nicht berücksichtigt.NSRect vs CGRect: y-Achse Inversion
Das Problem: Ein CGRect-Ursprung von (0,0) ist oben links. NSRect Herkunft (0,0) ist unten links.
So befindet sich eine NSRect (0,0,100,100)
Box unten links auf Ihrem Bildschirm, während eine CGRect (0,0,100,100)
Box oben links auf Ihrem Bildschirm platziert ist.
Ich habe einen Hack, der den y-Ursprung durch grundlegende mathematische behebt:
fixedOriginY = screenHeight - NSRect.size.height - NSRect.origin.y
So die äquivalent ein NSRect (0,0,100,100)
ist eigentlich CGRect (0,800,100,100)
(auf meiner 900px Höhe MBA). Aber ich mag das nicht, ich habe das Gefühl, dass es Probleme mit Netzhaut oder zukünftigen Komplikationen haben wird.
Hat jemand eine Lösung oder eine Idee, wie man NSRect korrekt in CGRect konvertiert?
Woran denken Sie, dass CoreGraphics den Ursprung oben links hat? Ich kann nur indirekten Verweis auf es sofort finden, aber siehe http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html - Suche nach dem Text "Das Standard-Koordinatensystem verwendet von Core Graphics Framework ist LLO-basiert. " (LLO = unterer linker Ursprung) – Tommy
Die NSWindow-Rahmeneigenschaft ist ein NSRect, also platziere ich sie bei 0,0 (unten links). Ich konvertiere diesen Frame in CGRect, mache einen Screenshot mit CGDisplayCreateImageForRect (zeigt [0], windowCGRect) an. Der Screenshot befindet sich oben links auf dem Bildschirm. – user339946
Denke nicht, dass es ein Unterschied zwischen 'CGRect' und' NSRect' ist. Sie sind beide nur einfache Strukturen, und ihre Werte haben nur eine Bedeutung relativ zu einem Koordinatensystem (entweder das des Codes, der das Rechteck lieferte oder verbraucht). In diesem Fall besteht der Unterschied zwischen dem Bildschirmkoordinatensystem von AppKit und dem Koordinatensystem des Koordinatensystems von CG, wie in [diese Antwort] beschrieben (http://stackoverflow.com/a/14228817/1218876). –