Вопрос

Я новичок в Cocoa, у меня есть некоторые сомнения относительно NSImage.

< sizesQuestion1:

Изменение начала границ изображения, похоже, не имеет никакого эффекта.Я ожидал, что изображение будет отрисовано из недавно установленного источника, но это не похоже на дело.Я что-то упускаю?

< sizescode: родовое слово

Примечание : imageView - это IBOutlet

< sizesQuestion2:

Я пытался обрезать изображение, но, похоже, изображение не обрезается, я вижу полное изображение.Что мне не хватает?

< sizescode: родовое слово

Спасибо

Это было полезно?

Решение

<цитата>

Изменение исходной границы изображения, похоже, не имеет никакого эффекта. …

родовое слово

Это изображение, а не изображение.

Эффект изменения границ представления зависит от того, что оно делает для рисования. Фактически это означает, что вы не должны изменять границы представления, которое не является экземпляром созданного вами класса представления, поскольку вы не можете точно предсказать, как NSImageView будет рисовать свое изображение (предположительно, поскольку это элемент управления, он включает его ячейку, но на большее я бы не стал полагаться).

В более общем плане происхождение границ представления меняется довольно редко. Я не помню, чтобы когда-либо делал это, и я не могу придумать причину, чтобы сделать это. Изменение размера границ приведет к масштабированию, а не кадрированию.

<цитата>

Я пытался обрезать изображение, но, похоже, изображение не обрезается, я вижу полное изображение. Что мне не хватает?

родовое слово

Указание изображению нарисовать ничего не меняет в изображении. Он не будет «обрезать изображение» таким образом, чтобы после этого изображение стало больше или меньше. Вы говорите ему рисовать, не более того.

Следовательно, оператор после этого устанавливает изображение представления изображения для всего изображения, точно так же, как если бы вы не сказали изображению рисовать, потому что указание рисовать не имеет значения.

То, что говорит изображение рисовать, именно следующее: оно говорит изображению рисовать. Для этого есть только два правильных места:

  1. Между сообщениями lockFocus и unlockFocus для представления или изображения (или после установки текущего NSGraphicsContext).
  2. В методе drawRect: представления.

В другом месте вы не должны указывать объекту Какао рисовать.

Один из правильных способов кадрирования изображения - создать новое изображение желаемого / настроенного размера, заблокировать на нем фокус, нарисовать в нем нужную часть исходного изображения и разблокировать фокус на новом изображении. После этого у вас будет как оригинальная, так и обрезанная версия.

Еще один правильный способ - создать собственное представление изображения, которое имеет два свойства: одно - изображение для рисования, а другое - прямоугольник. Когда ему говорят рисовать, это настраиваемое представление сообщает изображению нарисовать данный прямоугольник в границах представления. Тогда вы всегда будете держать исходное изображение и просто рисовать только желаемый участок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top