Какао: масштабное изображение, перетаскиваемое в ImageWell - PullRequest
1 голос
/ 04 мая 2010

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 04 мая 2010

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

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

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

1 голос
/ 04 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...