2013-01-15 61 views
0

是否可以更改NSImage的原点?如果是的话,我会如何去做这件事。我在常规笛卡尔系统中使用了一些负值的坐标系,我试图在NSImage中的相应位置绘制它们,但是由于原点位于(0,0),所以有一些缺失。更改NSImage来源

编辑:说我有一个绘图方面,需要做一个图像的点(-10,-10),目前这不显示出来。有没有办法解决这个问题?

+0

亲切阐述。 –

+0

更新了更多的信息。 – stormbard

回答

0

我认为你是NSImage与它的容器混淆。 NSImage没有边界或框架,因此没有起源。它确实有一个大小,它可能表示它的birtmap表示(如果它有一个)的像素尺寸,或者可能表示它的边界框(如果它是矢量图像)。在(-10,-10)的像素位置处绘制图像实际上并不合理。

NSImage显示在一个容器(通常是一个NSImageView)中,容器的bounds.origin将指定图像相对于imageView的位置,但不能修改位图边缘以外的像素。

在任何情况下,您可能都希望使用一个子类NSView,其中您将覆盖您的自定义绘图的drawRect方法。 NSView does有一个bounds.origin,但这与您的绘图坐标无关,而是与作为整体绘制的内容在视图边界框中的位置无关。您将要绘制的坐标系将参照您的图形上下文,它将(通常)将原点(0,0)固定到左下角(OSX)或左上角(iOS)。如果您试图在笛卡尔平面上表示负面点,则需要应用平移变换将您的点映射到该正坐标空间中。

我想用几句话来解释一下,苹果在他们的Quartz 2D Programming Guide中详细解释了一些东西。

+0

感谢您的回应。显然,通过我对该指南的多次阅读,我错过了这一点。你的解释有助于消除我的困惑。 – stormbard

1

如果它就像iOS中(你可能不得不适应一个小的代码),如果我的记忆不错,你必须这样做,因为originreadOnly的
CGRect myFrame = yourImage.frame;
myFrame.origin.x=newX;
myFrame.origin.y=newY;
yourImage.frame = myFrame;

+0

它与iOS几乎相同,但内存有点生疏。 NSImage或它的iOS对应UIImage都没有框架属性。他们有一个_size_,但没有_origin_(请参阅下面的答案)... – foundry