UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow];
- (UIImage*) glToUIImage
{
GLint backingWidth, backingHeight;
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
CGRect s =CGRectMake(0,0, backingWidth, backingHeight);
uint8_t *buffer = (uint8_t *)malloc(s.size.width * s.size.height *4);
glReadPixels(0,0, s.size.width, s.size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
CGDataProviderRef ref =CGDataProviderCreateWithData(NULL, buffer, s.size.width * s.size.height *4,NULL);
CGImageRef iref =CGImageCreate(s.size.width, s.size.height,8,32, s.size.width *4,CGColorSpaceCreateDeviceRGB(),
kCGBitmapByteOrderDefault, ref,NULL,true,kCGRenderingIntentDefault);
size_t width =CGImageGetWidth(iref);
size_t height =CGImageGetHeight(iref);
size_t length = width * height *4;
GLubyte *pixels = (GLubyte *)malloc(length);
CGContextRef cgcontext =CGBitmapContextCreate(pixels, width, height,8, width *4,
CGImageGetColorSpace(iref), kCGImageAlphaNoneSkipFirst |kCGBitmapByteOrder32Big);
//把图像转成正像
CGAffineTransform transform =CGAffineTransformIdentity;
transform = CGAffineTransformMakeTranslation(0.0f, height);
transform =CGAffineTransformScale(transform,1.0, -1.0);
CGContextConcatCTM(cgcontext, transform);
CGContextDrawImage(cgcontext,CGRectMake(0.0f,0.0f, width, height), iref);
CGImageRef outputRef =CGBitmapContextCreateImage(cgcontext);
UIImage* outputImage = [UIImageimageWithCGImage:outputRef];
//保存到相册
UIImageWriteToSavedPhotosAlbum(outputImage,nil,nil,nil);
CGDataProviderRelease(ref);
CGImageRelease(iref);
CGContextRelease(cgcontext);
CGImageRelease(outputRef);
free(pixels);
free(buffer);
NSLog(@"Screenshot size: %d, %d", (int)[outputImagesize].width, (int)[outputImagesize].height);
return outputImage;
}
-(void) glToUIImage {
NSInteger myDataLength =1024 * 768 *4; //1024-width,768-height
GLubyte *buffer = (GLubyte *)malloc(myDataLength);
glReadPixels(0,0,768, 1024, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
GLubyte *buffer2 = (GLubyte *)malloc(myDataLength);
for(int y =0; y <1024; y++)
{
for(int x =0; x <768 *4; x++)
{
buffer2[(1023 - y) *768 *4 + x] = buffer[y *4 *768 + x];
}
}
int bitsPerComponent =8;
int bitsPerPixel =32;
int bytesPerRow =4 * 768;
CGColorSpaceRef colorSpaceRef =CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo =kCGBitmapByteOrderDefault;
CGDataProviderRef provider =CGDataProviderCreateWithData(NULL, buffer2, myDataLength,NULL);
CGColorRenderingIntent renderingIntent =kCGRenderingIntentDefault;
CGImageRef imageRef =CGImageCreate(768,1024,
bitsPerComponent, bitsPerPixel, bytesPerRow,
colorSpaceRef, bitmapInfo, provider,NULL,NO, renderingIntent);
CGSize size =CGSizeMake(240,320);
UIGraphicsBeginImageContext(size);
[[UIImage imageWithCGImage:imageRef] drawInRect:CGRectMake(0,0,size.width,size.height)];
UIImage* myImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(myImage,nil,nil, nil);
CGDataProviderRelease(provider);
CGImageRelease(imageRef);
free(buffer);
free(buffer2);
}
UIImageWriteToSavedPhotosAlbum(myImage, nil, nil, nil);//保存图片到照片库
NSData *imageViewData = UIImageJPEGRepresentation(myImage, 1);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"Documents directory: %@", contents);
NSString *pictureName= @"screenShow.png";
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:pictureName];
[imageViewData writeToFile:savedImagePath atomically:YES];//保存照片到沙盒目录
//从手机本地加载图片
UIImage *bgImage2 = [[UIImage alloc]initWithContentsOfFile:savedImagePath];
-(BOOL)writeImage:(UIImage*)image
{
// Create paths to output images
NSString *pngPath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/Test.png"];
NSString *jpgPath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/Test.jpg"];
// Write a UIImage to JPEG with minimum compression (best quality)
// The value 'image' must be a UIImage object
// The value '1.0' represents image compression quality as value from 0.0 to 1.0
[UIImageJPEGRepresentation(image,1.0) writeToFile:jpgPath atomically:YES];
// Write image to PNG
[UIImagePNGRepresentation(image)writeToFile:pngPath atomically:YES];
// Let's check to see if files were successfully written...
// Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManagerdefaultManager];
// Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];
// file size
NSDictionary *fileAttributeDic=[fileMgr attributesOfItemAtPath:jpgPath error:nil];
NSLog(@"jpgPath:%@ size:%llu", jpgPath, fileAttributeDic.fileSize);
// Write out the contents of home directory to console
NSArray *contents = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error];
NSLog(@"Documents directory: %@", contents);
}