2010-01-28 3 views
2

Я пытаюсь взять свой буфер gl и превратить его в UIImage, сохраняя по-пиксельную альфу в этом gl-буфере. Кажется, он не работает, потому что в результате я получаю буфер без альфа. Может ли кто-нибудь помочь? Я чувствую, что, должно быть, мне не хватает нескольких ключевых шагов. Мне бы очень понравился любой совет по этому поводу.Создание UIImage с пикселем alpha из GL-буфера

В основном я делаю:

//Read Pixels from OpenGL 
glReadPixels(0, 0, miDrawBufferWidth, miDrawBufferHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 

//Make data provider with data. 
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, len, NULL); 

//Configure image 
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
CGImageRef iref = CGImageCreate(miDrawBufferWidth, miDrawBufferHeight, 8, 32, (4 * miDrawBufferWidth), colorSpaceRef, kCGBitmapByteOrderDefault, provider, NULL, NO, kCGRenderingIntentDefault); 

// use device's orientation's width/height to determine context dimensions (and consequently resulting image's dimensions) 
uint32* pixels = (uint32 *) IQ_NEW(kHeapGfx, "snapshot_pixels") GLubyte[len]; 

// use kCGImageAlphaLast? :-/ 
CGContextRef context = CGBitmapContextCreate(pixels, iRotatedWidth, iRotatedHeight, 8, (4 * iRotatedWidth), CGImageGetColorSpace(iref), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 


CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, miDrawBufferWidth, miDrawBufferHeight), iref); 
UIImage *outputImage = [[UIImage alloc] initWithCGImage:CGBitmapContextCreateImage(context)]; 

//cleanup 
CGDataProviderRelease(provider); 
CGImageRelease(iref); 
CGContextRelease(context); 

return outputImage; 

ответ

Смежные вопросы