Как я могу создать большие изображения в UIImageView? - PullRequest
4 голосов
/ 05 января 2011

Я сейчас разрабатываю приложение для создания открыток. Тем не менее, мне интересно, как сохранить картинку плюс кадр (у меня есть три кадра в зависимости от разрешения) и некоторый текст в UITextView (прозрачный фон).

Мне нужно сохранить оригинальное разрешение фотографии, даже если для рамки или экрана не разрешено разрешение более 320 на 480 пикселей (2: 3), а затем вставить рамку и текст. Меня не волнует текст, если я могу сохранить изображение в рамке.

Все, что мне нужно, это советы о том, как подойти к этой проблеме: мне нужны каркасные классы и, возможно, подсказки к методам (функциям, сообщениям), которые я могу использовать для работы с изображением в виде растрового изображения или в виде JPEG или PNG.

Невозможно сделать:

  • Идея моего руководителя проекта: отправить его на веб-страницу конвертера (я не могу вспомнить http-адрес), если Бог знает, в каком формате, и Бог знает, как указать веб-страницу для объединения всех представлений, а затем подождать, пока она вернется к телефон и сохранить его. Создание POstcard должно выполняться локально на тот случай, если пользователи Ipad захотят их создать, а затем сохранить их на ПК или в другом месте (лично я хотел бы исчерпать все ресурсы, которые может предложить среда разработки iPhone).

  • Получить текущий контекст, который объединяет все три класса / подклассы UIViews. Отлично подходит для 320 на 480, но не для больших разрешений.


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

Но у меня все еще есть одна небольшая проблема, которая немного меня беспокоит: изображение (внутри рамки) должно быть выбрано из библиотеки изображений или контроллера камеры, но, эй, оно приносит вам один объект (изображение по размеру, чтобы соответствовать экран) и словарь, который удивительно приносит оригинальное изображение тоже. Теперь есть два объекта. Но открытка должна быть сгенерирована в 4 разных разрешениях, и перенос четырех «версий» изображения приведет к огромным накладным расходам памяти.

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

NSString *const UIImagePickerControllerMediaURL;

NSString *const UIImagePickerControllerReferenceURL; 

в документе obj-c есть объекты, которые указывают на исходную информацию ... Я просто хочу уменьшить накладные расходы на alloc и dealloc, когда это необходимо.

1 Ответ

1 голос
/ 13 января 2011

Вам нужно нарисовать открытку в новом образе в памяти.Самый простой способ создать новое изображение - это функция UIGraphicsBeginImageContext().Затем вы можете использовать методы рисования UIKit для рендеринга фонового изображения, текста и т. Д. В новое изображение и получить полученное изображение с помощью UIGraphicsGetImageFromCurrentImageContext().В зависимости от ваших потребностей, вы можете также создать JPEG / PNG из полученного изображения и записать его на диск, используя UIImageJPEGRepresentation().

Вот пример:

UIImage *backgroundImage = [UIImage imageNamed:@"MyPostcardBackground.jpg"];
CGRect frameRect = CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height);
UIGraphicsBeginImageContext(backgroundImage.size);
[backgroundImage drawInRect:frameRect];
NSString *text = @"Caption here...";
[[UIColor whiteColor] set];
[text drawInRect:frameRect withFont:[UIFont boldSystemFontOfSize:35.0] lineBreakMode:UILineBreakModeWordWrap];
//...
UIImage *postcardImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
...