我想獲得一個數據數組,包含存儲在iOS(ios8 sdk)上的照片庫(ALAsset)中的圖片的RGB表示。 我已經嘗試過這種方法:從UIImage獲取RGB數據的快速方法(照片庫)
- 得到ALAsset的一個CGImage與[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);
是的我會用後臺線程。但另一個問題是內存。我首先從ALAsset(10mb)獲取UIImage,然後複製UIImage以獲取RGB數據(10mb)。這可能會引發內存壓力問題。 – Nitenq 2014-11-12 12:59:44