Как исправить ошибку при сохранении UIImage с SPRectangle на IOS 6.0
Эта функция возвращает черное изображение. Я использую Библиотеку Воробья.
Это мой код:
-(UIImage *) saveRectangle:(SPRectangle*)rectangle
{
int numberOfComponents = 8;
int width = rectangle.width;
int height = rectangle.height;
NSInteger bufferLenght = width * height * numberOfComponents;
NSMutableData * buffer= [NSMutableData dataWithLength:bufferLenght];
glPixelStorei(GL_PACK_ALIGNMENT, 4); // force 4 byte alignment
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, [buffer mutableBytes]);
CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, [buffer mutableBytes], bufferLenght, NULL);
CGImageRef iref = CGImageCreate(width, height, 8, 32, width * 4, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault, ref, NULL, true, kCGRenderingIntentDefault);
uint32_t* pixels = (uint32_t *)malloc(bufferLenght);
CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width*4, CGImageGetColorSpace(iref), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big);
CGContextTranslateCTM(context, 0.0, height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), iref);
CGImageRef outputRef = CGBitmapContextCreateImage(context);
free(pixels);
return [UIImage imageWithCGImage:outputRef];
}
1 ответ
Код, который вы показываете, имеет очень мало кода Sparrow (кроме SPRectangle, который очень похож на CGRect). Похоже, вы пытаетесь сохранить снимок прямоугольной области сцены воробья. Воробей намерен абстрагировать вас от деталей реализации OpenGL. Вы уверены, что будет проще использовать SPRenderTexture? http://doc.sparrow-framework.org/core/Classes/SPRenderTexture.html
Также убедитесь, что вы хотите вернуть UIImage, а не SPImage. Надеюсь, поможет.