翻译NSImageView中单击的NSPoint以更正底层NSBitmapImageRep中的像素坐标

时间:2010-01-22 04:19:40

标签: objective-c cocoa nsimageview nsbitmapimagerep

以下是我要完成的工作:我正在开发一个开源TI计算器模拟器,我正在尝试添加皮肤支持。皮肤图像只是一个NSImageView,其图像设置为皮肤图像。我重写了mouseDown:方法,并使用convertPointFromBase获取鼠标在NSImageView坐标中的位置:将locationInWindow返回值作​​为转换点。

然后我使用bestRepresentationForDevice从NSImageView获取底层NSBitmapImageRep:使用nil参数。最后,我在NSBitmapImageRep上使用point.x和point.y调用getPixel:atX:y作为位置。

但是,NSImageView的原点从左下角开始(像往常一样),而NSBitmapImageRep的坐标从左上角开始。我似乎无法找到一种明显的方法来弥补这一点,因此按钮点击的命中测试无法正常运行。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我从未考虑重写isFlipped以在我的NSImageView子类中返回YES。这解决了这个问题。

答案 1 :(得分:0)

对我来说似乎很容易,只需根据矩形的高度计算y坐标:

NSPoint pointInFlippedRect(NSPoint inPoint, NSRect aRect)
{
    return NSMakePoint(inPoint.x , NSHeight(aRect) - inPoint.y);
}