我正在开发一个应用程序,我显示不支持(通过XCode)文件格式)。所以我将NSBitmapImageRep
子类化为在NSImaageView
的子类中显示它。我把它设置成按比例可扩展(向上或向下)。现在我需要添加一个获取位图中像素坐标的可能性。所以我是ovveride mouseDown:方法:
- (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
的{{1}}而不是位图的问题这在NSImageView
中通常较小并且没有未使用的边距,但我可以点击边距并且mouseDown事件会在该边距中返回NSImageView
。你知道我该做什么吗?
答案 0 :(得分:0)
您需要一个图像矩阵视图。它是一个将视图坐标映射到图像坐标的矩阵。通常它将是规模和翻译的结合。
首先,您需要决定是否要缩放图像,使其完全可见,但要适合窗口,或者完全填满窗口。 (或者还有其他选项,例如无论窗口大小如何,始终以1:1显示图像。)这将决定图像的比例。
接下来,您需要决定如何定位缩放图像。如果你把它缩放到总是适合窗口,并且有填充,你喜欢窗口的左侧和顶部,还是总是试图将它居中?如果它被缩放以始终填充窗口,它是否在窗口中垂直或水平居中?或者图像的原点是否始终显示在窗口的左下方?
一旦你弄清楚了比例和翻译,就可以从其中的2个中组成一个矩阵。完成后,得到矩阵的逆矩阵,这会将视图坐标转换为图像像素。