Изменение размеров UIImage на iPhone с небольшим объемом потребляемой памяти

Я видел, что этот вопрос спросил десятки времен, но никогда не отвечал.

То, как Вы изменяете размер UIImage (конкретно один возвратилось из камеры UIImagePickerController). Когда я пробую любой из методов, которые являются там, я получаю скачок памяти между 20 и 40 МБ. Это действительно уходит, но я знаю, что на некоторых аппаратных средствах это абсолютно недопустимо.

Я попробовал методы, которые используют следующие операции: drawInRect: CGContextDrawImage (), imageWithCGImage:scale:orientation:

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

Даже Apple сразу рекомендует изменить размер снимка, сделанного с камерой. Однако (b/c я полагаю, что они знают, что эта тема сильно сложна), они не предлагают слов руководства о том, как управлять этим. Особенно, как сделать это момент, данные изображения возвращаются.

У кого-либо есть гладкий метод для изменения размеров большого UIImage при сохранении памяти? Я знаю, что это - трудная задача.

8
задан sambecker 1 August 2010 в 21:50
поделиться

2 ответа

У меня нет 100% отличного ответа здесь, но у вас есть пара вариантов. Iphone позволит вам войти в режим редактирования / обрезки и т. Д. Я думаю, что Apple хочет, чтобы вы использовали это. Для нас это было не совсем приемлемо. Мы захватываем данные изображения, получаем данные пикселей, освобождаем исходное изображение. Затем измените размер верхней половины, затем сами. Я бы опубликовал код, но меня нет на работе. Могу через несколько дней после отпуска ...

0
ответ дан 6 December 2019 в 00:54
поделиться

Метод, который использует мало памяти, заключается в создании растрового контекста с помощью CGBitmapContextCreate и рисовании UIImage в него. Единственная дополнительная память, которая при этом будет использоваться, это та, которую вы malloced и некоторые небольшие CGContext накладные расходы.

Если вы хотите пофантазировать, вы можете вместо этого mmap с установленным флагом PROT_WRITE и быть ограничены только виртуальным адресным пространством

1
ответ дан 6 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: