4 Stimmen

Übersetzen Sie geklickte NSPoint im NSImageView in die korrekten Pixelkoordinaten im darunter liegenden NSBitmapImageRep.

Hier ist, was ich zu erreichen versuche: Ich arbeite an einem Open-Source-TI-Taschenrechner-Emulator, bei dem ich derzeit versuche, Skins zu unterstützen. Das Skin-Bild ist nur ein NSImageView mit dem Bild, das auf das Skin-Bild gesetzt ist. Ich überschreibe die Methode mouseDown: und erhalte den Mausstandort in den NSImageView-Koordinaten unter Verwendung von convertPointFromBase: mit locationInWindow als Punkt zum Konvertieren.

Dann greife ich auf das zugrunde liegende NSBitmapImageRep des NSImageView mit bestRepresentationForDevice: und einem nil-Argument zu. Schließlich rufe ich _getPixel:_atX:y auf dem NSBitmapImageRep mit point.x und point.y für den Standort auf.

Der Ursprung des NSImageView beginnt jedoch unten links (wie üblich), während die Koordinaten für den NSBitmapImageRep oben links beginnen. Ich kann keinen offensichtlichen Weg finden, um das auszugleichen, sodass das Hit-Testing für Mausklicks nicht ordnungsgemäß funktioniert. Jede Hilfe wird sehr geschätzt.

1voto

user256411 Punkte 51

Ich habe nie in Betracht gezogen, isFlipped in meiner NSImageView-Unterklasse zu überschreiben. Das löst das Problem.

0voto

Rob Keniger Punkte 45562

Scheint ziemlich einfach für mich zu sein, berechne einfach die y-Koordinate basierend auf der Höhe des Rechtecks:

NSPoint pointInFlippedRect(NSPoint inPoint, NSRect aRect)
{
    return NSMakePoint(inPoint.x , NSHeight(aRect) - inPoint.y);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X