Перевод нажал 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);
}
Другие вопросы по тегам