Перевод нажал NSPoint в NSImageView, чтобы исправить пиксельные координаты в базовом NSBitmapImageRep
Вот что я пытаюсь сделать: я работаю над эмулятором TI-калькулятора с открытым исходным кодом, где в настоящее время пытаюсь добавить поддержку скинов. Изображение скина - это просто NSImageView с его изображением, установленным на изображение скина. Я переопределяю mouseDown: метод и получаю местоположение мыши в координатах NSImageView, используя convertPointFromBase: с возвращаемым значением locationInWindow в качестве точки для преобразования.
Затем я получаю базовый NSBitmapImageRep из NSImageView, используя bestRepresentationForDevice: с нулевым аргументом. Наконец, я вызываю getPixel:atX:y для NSBitmapImageRep с point.x и point.y для местоположения.
Однако начало NSImageView начинается в левом нижнем углу (как обычно), тогда как координаты NSBitmapImageRep начинаются в левом верхнем углу. Кажется, я не могу найти очевидный способ компенсировать это, поэтому проверка нажатия на нажатия кнопок не работает должным образом. Любая помощь с благодарностью.
2 ответа
Я никогда не рассматривал переопределение isFlipped для возврата YES в мой подкласс NSImageView. Это решает проблему.
Мне это кажется довольно простым, просто вычислите координату y на основе высоты прямоугольника:
NSPoint pointInFlippedRect(NSPoint inPoint, NSRect aRect)
{
return NSMakePoint(inPoint.x , NSHeight(aRect) - inPoint.y);
}