2010-12-18 57 views
0

我正在使用以下代码拍摄我的cocos2D iPad应用程序的屏幕截图。opengl图层屏幕截图中的问题

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

此代码在模拟器上工作,但在实际设备上无法工作。

请帮忙。

谢谢。

+0

当您在设备上运行代码时是否会引发任何错误?你怎么知道它不在设备上工作? – 2010-12-18 05:13:45

+0

不,没有给出任何错误。并且设备上的结果模糊不清。 – 2010-12-18 06:25:45

+0

完成。问题是我的opengl层的宽度。它的宽度应该是32的倍数,这不是我的情况。 – 2010-12-27 13:50:45

回答

0

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