Я хотел бы получить массив данных, содержащий представление RGB изображения, хранящегося в библиотеке фотографий (ALAset) на iOS (ios8 sdk). я уже попробовал этот метод:быстрый способ получить данные RGB от UIImage (фото библиотека)
- получить в CGImage от ALAsset с [ALAssetRepresentation fullScreenImage]
- привлечь CGImage к CGContext.
Этот метод работает, я получаю указатель на данные RGB, но это очень медленно (есть 2 преобразования). Конечная цель - быстро загрузить изображение в текстуре OpenGL.
Мой код, чтобы получить изображение из библиотеки фотографий
ALAsset* currentPhotoAsset = (ALAsset*) [self.photoAssetList objectAtIndex:_currentPhotoAssetIndex];
ALAssetRepresentation *representation = [currentPhotoAsset defaultRepresentation];
//-> REALLY SLOW
UIImage *currentPhoto = [UIImage imageWithCGImage:[representation fullScreenImage]];
Мой код рисовать на CGContext:
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * textureWidth;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(textureData, textureWidth, textureHeight,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
//--> THAT'S REALLY SLOW
CGContextDrawImage(context, CGRectMake(0, 0, textureWidth, textureHeight), cgimage);
CGContextRelease(context);
Да Я буду использовать фоновый поток. Но другая проблема - память. Сначала я получил UIImage от ALAsset (10mb), а затем скопировал UIImage, чтобы получить данные RGB (10 Мб). Это может вызвать проблемы с давлением в памяти. – Nitenq