Переводя нажатой NSPoint в NSImageView, чтобы исправить пиксельные координаты в базовом NSBitmapImageRep - PullRequest
2 голосов
/ 22 января 2010

Вот что я пытаюсь сделать: я работаю над эмулятором TI-калькулятора с открытым исходным кодом, где в настоящее время пытаюсь добавить поддержку скинов. Изображение скина - это просто NSImageView с его изображением, установленным на изображение скина. Я переопределяю mouseDown: метод и получаю местоположение мыши в координатах NSImageView, используя convertPointFromBase: с возвращаемым значением locationInWindow в качестве точки для преобразования.

Затем я получаю базовый NSBitmapImageRep из NSImageView, используя bestRepresentationForDevice: с нулевым аргументом. Наконец, я вызываю getPixel: atX: y для NSBitmapImageRep с point.x и point.y для местоположения.

Однако начало NSImageView начинается в левом нижнем углу (как обычно), тогда как координаты для NSBitmapImageRep начинаются в левом верхнем углу. Кажется, я не могу найти очевидный способ компенсировать это, поэтому проверка нажатия на нажатия кнопок не работает должным образом. Любая помощь с благодарностью.

Ответы [ 2 ]

1 голос
/ 22 января 2010

Я никогда не рассматривал переопределение isFlipped для возврата YES в мой подкласс NSImageView. Это решает проблему.

0 голосов
/ 22 января 2010

Мне кажется это довольно простым, просто вычислите координату y на основе высоты прямоугольника:

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