2010-12-18 6 views
0

Ich benutze folgenden Code, um Screenshot meiner cocos2D iPad-Anwendung zu nehmen.Problem in opengl Schicht Screenshot

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

Dieser Code funktioniert für mich am Simulator, funktioniert aber nicht am tatsächlichen Gerät.

Bitte helfen.

Danke.

+0

Gibt es Fehler, wenn Sie den Code auf dem Gerät ausführen? Woher weißt du, dass es auf dem Gerät nicht funktioniert? –

+0

Nein. Es gibt keinen Fehler. Und das Ergebnis auf dem Gerät ist verschwommen. –

+0

Es ist fertig. Das Problem war mit der Breite meiner OpenGL-Schicht. Seine Breite sollte ein Vielfaches von 32 sein, was bei mir nicht der Fall war. –

Antwort

0

Es ist fertig. Das Problem war mit der Breite meiner OpenGL-Schicht. Seine Breite muss ein Vielfaches von 32 sein, was bei mir nicht der Fall war.