В настоящее время я использую следующий код для получения UIImage из ALAsset в приложении iOS.
ALAssetRepresentation *rep = [self.asset defaultRepresentation];
CGImageRef ref = [rep fullResolutionImage];
ALAssetOrientation orientation = [[self.asset valueForProperty:@"ALAssetPropertyOrientation"] intValue];
UIImage *image = [UIImage imageWithCGImage:ref scale:1.0 orientation:(UIImageOrientation)orientation];
Это работает очень хорошо, если изображение достаточно маленькое (например, снято на камеру устройства). Однако если изображение слишком большое (6000px ^ 2 и более), приложению не хватит памяти на этом этапе:
CGImageRef ref = [rep fullResolutionImage];
Я хотел бы обнаружить это условие до сбоя приложения или (в идеале) установить максимальный размер возвращаемого изображения.
Мне известно, что fullScreenImage
вернет меньшее изображение, однако для масштабирования приложению требуется гораздо более высокое разрешение по сравнению с изображением.
Кроме того, использование байтового размера ресурса ненадежно, так как форматы с высокой степенью сжатия, такие как JPG, могут быть небольшими по размеру в упакованном виде, но при этом их размер в пикселях будет слишком большим (изображения с низкой детализацией, изображения с высокой степенью сжатия) .
Будем весьма благодарны за любые вводные данные о том, как заранее получить размеры изображения и определить эту ситуацию, чтобы я мог отменить загрузку и отобразить ошибку, или как получить уменьшенную версию такого большого ресурса.