获取glviews图像错误?

时间:2012-12-22 13:08:52

标签: ios opengl-es cocos2d-iphone

此代码适用于模拟器和任何不具有视网膜屏幕的东西。但是它为视网膜提供了黑色图像?我为非视网膜设备获得了正确的图像。 有没有人知道为什么结果黑屏?

- (UIImage*) screenShotUIImage {

CGSize size = glView.frame.size;
//Create un buffer for pixels
GLuint bufferLenght=size.width*size.height*4;
GLubyte *buffer = (GLubyte *) malloc(bufferLenght);

//Read Pixels from OpenGL
glReadPixels(0,0,size.width,size.height,GL_RGBA,GL_UNSIGNED_BYTE,buffer);
//Make data provider with data.
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, bufferLenght, NULL);

//Configure image
int bitsPerComponent = 8;
int bitsPerPixel = 32;
int bytesPerRow = 4 * size.width;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGImageRef iref = CGImageCreate(size.width,size.height,bitsPerComponent,bitsPerPixel,bytesPerRow,colorSpaceRef,bitmapInfo,provider,NULL,NO,renderingIntent);

uint32_t *pixels = (uint32_t *)malloc(bufferLenght);

CGContextRef context = CGBitmapContextCreate(pixels, glView.frame.size.width, glView.frame.size.height, 8, glView.frame.size.width*4, CGImageGetColorSpace(iref), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGContextTranslateCTM(context,0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);

/*
 CGContextRotateCTM(context, CC_DEGREES_TO_RADIANS(-90));
 CGContextTranslateCTM(context,-size.height, 0);
 */

CGContextDrawImage(context, CGRectMake(0.0, 0.0, size.width, size.height), iref);
UIImage *outputImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)];

//Dealloc
CGDataProviderRelease(provider);
CGImageRelease(iref);
CGContextRelease(context);
free(buffer);
free(pixels);
UIImageView *img=[[UIImageView alloc]initWithImage:outputImage];
[img setFrame:CGRectMake(0, 0, 800, 600)];
//    [self.view addSubview:img];
return outputImage; }

0 个答案:

没有答案