В настоящее время я использую следующий код для получения 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, могут быть небольшими по упакованному размеру, но все же потреблять слишком много памяти, если их размер в пикселях высок (изображения с низкой детализацией, сильно сжатые изображения).
Будем очень признательны за любой вклад в то, как получить размеры изображения и заранее определить эту ситуацию, чтобы я мог отменить загрузку и отобразить ошибку, или как получить уменьшенную версию такого большого актива.