在NSImageView中获取mouseDown上位图的坐标

时间:2013-06-01 02:04:58

标签: objective-c cocoa pixel nsimageview nspoint

我正在开发一个应用程序,我显示不支持(通过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。你知道我该做什么吗?

1 个答案:

答案 0 :(得分:0)

您需要一个图像矩阵视图。它是一个将视图坐标映射到图像坐标的矩阵。通常它将是规模和翻译的结合。

首先,您需要决定是否要缩放图像,使其完全可见,但要适合窗口,或者完全填满窗口。 (或者还有其他选项,例如无论窗口大小如何,始终以1:1显示图像。)这将决定图像的比例。

接下来,您需要决定如何定位缩放图像。如果你把它缩放到总是适合窗口,并且有填充,你喜欢窗口的左侧和顶部,还是总是试图将它居中?如果它被缩放以始终填充窗口,它是否在窗口中垂直或水平居中?或者图像的原点是否始终显示在窗口的左下方?

一旦你弄清楚了比例和翻译,就可以从其中的2个中组成一个矩阵。完成后,得到矩阵的逆矩阵,这会将视图坐标转换为图像像素。