我是可可的新手,我对NSImage有一些疑问。

问题1:

更改图像的边界原点似乎没有任何效果。我希望图像是从新设置的原点绘制的,但事实并非如此。我想念什么吗?

代码: 通用标签

注意:imageView是IBOutlet

问题2:

我正在尝试裁剪图像,但是似乎没有裁剪图像,我可以看到完整的图像。我想念的是什么?

代码: 通用标签

谢谢

有帮助吗?

解决方案

更改图像的边界原点似乎没有任何效果。 … 通用标签

那是图像视图,而不是图像。

更改视图边界的效果取决于视图所做的绘制。实际上,这意味着您不应更改不是您创建的视图类实例的视图的边界,因为您无法准确预测NSImageView将如何绘制其图像(大概是因为它是控件,所以它涉及到它的单元格,但更重要的是,我不会依赖它。

更一般而言,更改视图的边界原点非常罕见。我不记得曾经做过,而且我想不出这样做的理由。更改其边界大小将缩放而不是裁剪。

我正在尝试裁剪图像,但是似乎没有裁剪图像,我可以看到完整的图像。我想念的是什么? 通用标签

告诉图像进行绘制不会改变图像。它不会“裁剪图像”,以使图像此后变小或变大。您是在告诉它绘制,仅此而已。

因此,随后的语句将图像视图的图像设置为整个图像,就像您没有告诉图像要绘制一样,因为告诉它绘制没有影响。

告诉图像绘制的确切原因是:它告诉图像绘制。只有两个正确的位置可以做到这一点:

  1. lockFocusunlockFocus消息之间发送到视图或图像(或在设置当前的NSGraphicsContext之后)。
  2. 在视图的drawRect:方法内。

    在其他任何地方,您都不应告诉任何可可对象要绘制。

    一种裁剪图像的正确方法是创建所需/调整大小的新图像,将焦点锁定在该图像上,将原始图像的所需部分绘制到其中,然后解锁新图像。然后,您将拥有原始版本和裁剪版本。

    另一种正确的方法是创建自己的具有两个属性的自定义图像视图:一个拥有要绘制的图像,另一个拥有矩形。当被告知要绘制时,此自定义视图将告诉图像将给定的矩形绘制到视图的边界内。然后,您将始终保留原始图像并仅绘制所需的部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top