Снимок экрана слишком велик, если снимать его на устройствах iOS с высоким разрешением - PullRequest
0 голосов
/ 18 февраля 2019

Когда я делаю снимок экрана для полноразмерного просмотра на устройствах с высоким разрешением iOS, данные изображения результата очень велики.Например, разрешение iPhoneX составляет 812 * 375, а масштаб экрана - 3. Таким образом, изображение ARGB для полного снимка экрана займет около 812 * 3 * 375 * 3 * 4 байта, или 10,4 МБ.Поэтому, когда я использую эти снимки экрана в своем приложении, использование памяти перейдет на высокий уровень и, возможно, вызовет предупреждение памяти.

Вот мой код:

if (CGRectIsEmpty(self.bounds)) {
        return nil;
}
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen] scale]);
[self drawViewHierarchyInRect:self.bounds
           afterScreenUpdates:NO];
UIImage *renderImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Даже еслиЯ сжимаю снимок экрана, в памяти все еще есть импульсы.

enter image description here

Итак, мой вопрос: есть ли хороший способ взять высокийразрешение скриншота и избежать давления памяти?

1 Ответ

0 голосов
/ 19 февраля 2019

Я столкнулся с такими же проблемами при работе с изображениями - использование памяти может быть очень сильным, вызывая предупреждения и сбои памяти, особенно при использовании метода UIImageJPEGRepresentation на старых устройствах (iPhone 4).Поэтому я старался избегать использования этого метода, сохраняя изображения в Галерею и извлекая их впоследствии, но это мало помогает, но скачки памяти все равно сохраняются.

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

Также обратитесь к этому вопросу.

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

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