2010-05-04 6 views
1

Я работаю над приложением, чтобы сохранить коллекцию комиксов в порядке. Пользователь должен иметь возможность перетаскивать изображение обложки в программу с помощью ImageWell.Какао: Масштаб изображения перетаскивается в ImageWell

Поскольку невозможно перетащить изображение из приложения снова, мне не нужно сохранять изображение в оригинальном размере. Изображение размером с ImageWell было бы прекрасно.

Вопрос в том, как изменить масштаб изображения с помощью моего приложения?

Чтобы сделать вещи еще более сложными, ImageWell связан с основными данными. Поэтому мне нужно перемасштабировать изображение до того, как Core Data сохранит изображение в исходном размере.

ответ

3

Обычный способ масштабирования изображения, чтобы выделить новый NSImage с желаемыми меньшими размерами, lockFocus на нем, и сделать оригинальное изображение в NSImage (unlockFocus, когда вы сделали, конечно). Оттуда вы можете сериализовать изображение в различных форматах, используя либо CoreGraphics API, либо, если ваши потребности просты, метод TIFFRepresentation на NSImage.

Что касается работы с основными данными, я бы рекомендовал сохранить ваше изображение в отдельном объекте с отношением к объекту, которому это принадлежит. Причина в том, что Core Data загружает все данные для объекта одновременно при извлечении, поэтому, когда вам не нужны данные изображения (которые могут быть довольно большими даже для небольших изображений), вы можете избежать медленной производительности и давления памяти загружая его в память при каждой выборке. Вы можете поместить преходящее свойство image на основную сущность, которая лениво загружает/сохраняет изображение по мере необходимости.

Когда ваше изображение хорошо обновляет привязку к новому изображению, это будет прекрасной возможностью для масштабирования и сохранения изображения в вашем объекте данных. То есть вы передадите изображение полного размера объекту данных посредством привязки, и оно будет обрабатывать масштабирование.

1

Think NSValueTransformer. Трансформатор значений - это просто ... он преобразует значение. Таким образом, вы хотите, чтобы ваш размер изображения (например, преобразованный) и преобразователи значения работали через привязки. Если вы посмотрите на привязки в построителе интерфейсов, вы увидите раздел «Трансформатор значений», в котором вы подключите свой трансформатор. Трансформаторы имеют два основных метода, которые делают вещи, метод transformValue и метод reverseTransformedValue. Первый используется при отображении ваших данных в представлении изображения, а второй используется в противоположном направлении ... когда данные записываются в вашу базовую модель данных. Таким образом, это методы in-and-out, которые находятся между основными данными и интерфейсом.

Итак, для вашего случая, вы должны изменить размер (как объяснил Алекс) в методе reverseTransformedValue. См. here для получения более подробной информации и примеров того, что вам нужно сделать.