2010-01-28 14 views
2

J'essaye de prendre mon buffer gl et de le transformer en UIImage tout en conservant l'alpha par pixel dans ce buffer gl. Cela ne semble pas fonctionner, car le résultat obtenu est le tampon sans alpha. Quelqu'un peut-il aider? J'ai l'impression que je dois manquer quelques étapes clés quelque part. J'aimerais vraiment tout conseil à ce sujet.Création de UIImage avec alpha par pixel à partir du buffer GL

En fait, je le veux

//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; 

Répondre