我正在使用以下代码截取屏幕截图:
// Returns 1024x768 for iPad Retina
CGSize screenDimensions = [[UIScreen mainScreen] bounds].size;
// Create a graphics context with the target size
// (last parameter takes scale into account)
UIGraphicsBeginImageContextWithOptions(screenDimensions, NO, 0);
// Render the view to a new context
CGContextRef context = UIGraphicsGetCurrentContext();
[myView.layer renderInContext:context];
// Save to Camera Roll
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenshot, self, nil, nil);
UIGraphicsEndImageContext();
这是有效的,但我有一个用户的报告,这会导致相机胶卷中的图像不符合iPad视网膜分辨率。相反,它看起来更像iPad非视网膜分辨率。 (我没有iPad 3来测试它。)
还有什么我做错了吗?
答案 0 :(得分:2)
所以我终于拿到了一个物理iPad Retina,我发布的代码原本可以正常工作。生成的图像看起来确实处于完整的Retina分辨率。
答案 1 :(得分:0)
以下是我正在使用的代码,我似乎对iPad 3没有任何问题。您还可以在iOS模拟器中使用视网膜iPad进行确认。我的代码也将文件保存到文档目录。您可以根据自己的需要修改它。
CGSize screenSize = [[UIScreen mainScreen] applicationFrame].size;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(nil, screenSize.width, screenSize.height, 8, 4*(int)screenSize.width, colorSpaceRef, kCGImageAlphaPremultipliedLast);
CGContextTranslateCTM(ctx, 0.0, screenSize.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
[(CALayer*)self.view.layer renderInContext:ctx];
CGImageRef cgImage = CGBitmapContextCreateImage(ctx);
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpaceRef);
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/myscreenshot.jpg", docDir];
[UIImageJPEGRepresentation(image, 1.0) writeToFile:filePath atomically:YES];