0

このコードは、シミュレーターや網膜画面以外のすべてで機能しますが、網膜の黒い画像が表示されますか?網膜以外のデバイスの正しい画像が得られます。結果が黒い画面になる理由を知っている人はいますか?

- (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; }
4

0 に答える 0