更改NSImage Origin

时间:2013-01-15 16:56:03

标签: objective-c macos nsimage

是否可以更改NSImage的来源?如果是这样,我将如何做到这一点。我在常规笛卡儿系统中有坐标,其中一些具有负值,我试图在NSImage中的相应点绘制它们,但由于原点位于(0,0),因此有一些缺失。

编辑:假设我有一个绘图方面需要在点(-10,-10)处对图像进行,目前这不会显示。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

如果它像在iOS中一样(你可能需要调整一点代码),如果我的记忆仍然很好,你必须这样做,因为origin readOnly :<登记/> CGRect myFrame = yourImage.frame;
myFrame.origin.x=newX;
myFrame.origin.y=newY;
yourImage.frame = myFrame;

答案 1 :(得分:0)

我认为你把NSImage与它的容器混淆了。 NSImage没有边界或框架,因此没有原点。它确实有 size ,它可以表示其birtmap表示的像素尺寸(如果它有一个)或者可以表示它的边界框(如果它是矢量图像)。在像素位置(-10,-10)处绘制图像并没有多大意义。

NSImage显示在容器(通常是NSImageView)中,容器的bounds.origin将指示图像相对于imageView的位置,但不能修改超出位图平面边缘的像素。 / p>

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

我试图用一句话来解释一下,苹果公司在Quartz 2D Programming Guide中详细解释了这些内容。