2010-12-18 27 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

デバイスでコードを実行すると、エラーがスローされますか?それがデバイス上で動作していないことをどのように知っていますか? –

+0

いいえ、間違いはありません。そして、デバイスの結果がぼやけています。 –

+0

完了です。問題は、私のOpenGL層の幅でした。その幅は私の場合ではない32の倍数でなければなりません。 –

答えて

0

完了です。問題は、私のOpenGL層の幅でした。その幅は私の場合ではない32の倍数でなければなりません。

関連する問題