Ipad opengl层截图中的问题

Ipad opengl层截图中的问题,ipad,Ipad,我正在使用以下代码拍摄我的cocos2D iPad应用程序的屏幕截图 CGSize size = CGSizeMake(WIDTH,HEIGHT); //Create un buffer for pixels GLuint bufferLenght=size.width*size.height*4; GLubyte *buffer = (GLubyte *) malloc(bufferLenght); //Read Pixels from OpenGL glReadPixels(0

我正在使用以下代码拍摄我的cocos2D iPad应用程序的屏幕截图

 CGSize size = CGSizeMake(WIDTH,HEIGHT);
 //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, WIDTH, HEIGHT, 8, WIDTH*4, CGImageGetColorSpace(iref), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

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

 //screen shot of cocos2D layer
 CGContextDrawImage(context, CGRectMake(0.0, 0.0, size.width, size.height), iref);
 UIImage* screenshot = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)];


 @try
 {
  NSFileManager *fileManager = [NSFileManager defaultManager]; 
  NSArray *documentsDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
  NSString *paths = [documentsDir objectAtIndex:0]; 
  NSData *myData = UIImageJPEGRepresentation(screenshot, 1.0);
  NSDictionary *fileAttributes = [fileManager fileAttributesAtPath:paths traverseLink:YES];
  [fileManager createFileAtPath:[paths stringByAppendingPathComponent:@"design.jpg"] contents:myData attributes:fileAttributes];  
  UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil);

 }
 @catch (NSException *e) 
 {
  //NSLog(@"File error.....");
 }

 UIGraphicsEndImageContext();

 //Dealloc
 CGDataProviderRelease(provider);
 CGImageRelease(iref);
 CGContextRelease(context);
 free(buffer);
 free(pixels);
此代码在模拟器上对我有效,但在实际设备上不起作用

请帮忙


谢谢。

完成了。问题在于我的opengl图层的宽度。它的宽度必须是32的倍数,这在我的情况下是不允许的。

在设备上运行代码时是否引发任何错误?你怎么知道它在设备上不工作?不,它没有给出任何错误。设备上的结果是模糊的,完成了。问题在于我的opengl图层的宽度。它的宽度应该是32的倍数,这在我的情况下不是。