Я работаю над приложением, в котором я показываю неподдерживаемый (по XCode) формат файла). Поэтому я подклассифицировал NSBitmapImageRep
, чтобы отобразить его в подклассе NSImaageView
. Я настроил его на пропорциональное масштабирование (вверх или вниз). Теперь мне нужно добавить возможность получить координаты пикселя в растровом изображении. Так что я ovveride MouseDown: метод:Получение координат растрового изображения на mouseDown в NSImageView
- (void)mouseDown:(NSEvent *)theEvent
{
NSLog(@"mouseDown: %ld", [theEvent clickCount]);
NSPoint point = [theEvent locationInWindow];
NSLog(@"point x: %f and y: %f", point.x, point.y);
}
После получения NSPoint я должен попытаться преобразовать его в координаты растрового изображения, но сначала я понятия не имею, как решить проблему, которая locationInWindow возвращает NSPoint
из NSImageView
, а не битмап, который обычно меньше и имеет неиспользованные поля в NSImageView
, но я могу нажать на поле, а событие mouseDown возвращает мне NSPoint
в этом поле. Вы знаете, что я делаю?
Спасибо за ваш ответ, но я подумал, что эта задача будет менее сложной. Пожалуйста, объясните мне более подробно, что вы имеете в виду «получить обратную матрицу». Может быть, есть сторонние библиотеки для управления изображениями по пикселям (и получение их координат на mouseDown, конечно)? Вы знаете что-нибудь? – zioolek
Если у вас есть матрица преобразования, она преобразует координаты из одного пространства в другое. Обратный матрица преобразует их обратно. Но в этом случае вам не нужно использовать полную матрицу. Вам нужен только масштаб и перевод. Если у вас есть масштаб и перевод, чтобы идти в одном направлении, просто инвертируйте масштаб и вычтите перевод для перехода в другом направлении. – user1118321
Спасибо. Сейчас я работаю над этим и думаю, что он сработает. Кстати, метод locationInWindow возвращает объект NSPoint в базовой системе координат связанного окна, а не NSImageView (это в документации, но я не понимал этого в первый момент). Еще раз - спасибо! – zioolek