我正在制作一个应用程序,在那里我显示不支持的(由XCode)文件格式)。我将NSBitmapImageRep
子类化为NSImaageView
的子类。我将其设置为可按比例缩放(向上或向下)。现在我需要添加一个可能性来获得位图中像素的坐标。我重写了mouseDown: method:
- (void)mouseDown:(NSEvent *)theEvent
{
NSLog(@"mouseDown: %ld", [theEvent clickCount]);
NSPoint point = [theEvent locationInWindow];
NSLog(@"point x: %f and y: %f", point.x, point.y);
}
获得npoint后,我应该尝试将其转换为位图的坐标,但首先我不知道如何解决locationInWindow返回NSImageView
的NSPoint
的问题,而不是位图,通常较小,在NSImageView
中具有未使用的边距,但我可以单击边距和mouseDown事件返回我在该边距中的NSPoint
。你知道我该怎么做吗?
您需要一个视图到图像矩阵。它是一个将视图坐标映射到图像坐标的矩阵。通常是比例和翻译的结合。
首先,您需要决定是否要缩放图像,使其完全可见,但适合在窗口内,或者使其完全填充窗口。(或者还有其他选择,比如无论窗口大小,始终以1:1的比例显示图像。)这将决定图像的比例。
接下来你需要决定如何定位缩放后的图像。如果你将它缩放到始终适合窗口,并且有填充,你是喜欢窗口的左侧和顶部,还是总是尝试居中?如果它被缩放到总是填充窗口,它是垂直或水平居中的窗口?还是图像的原点总是显示在窗口的左下方?
一旦你算出了比例和平移,你就可以把它们两个组成一个矩阵。一旦你完成了,得到矩阵的逆,这将把你的视图坐标转换成图像像素。