是否可以更改NSImage的来源?如果是这样,我将如何做到这一点。我在常规笛卡儿系统中有坐标,其中一些具有负值,我试图在NSImage中的相应点绘制它们,但由于原点位于(0,0),因此有一些缺失。
编辑:假设我有一个绘图方面需要在点(-10,-10)处对图像进行,目前这不会显示。有办法解决这个问题吗?
答案 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中详细解释了这些内容。