如何将2x图像作为屏幕截图?

时间:2014-04-28 05:49:47

标签: ios uiimageview screenshot

我想拍摄窗口的屏幕截图,并将该图像用作新视图控制器的背景视图。我的问题是,该图像是视网膜显示中的模糊,因为图像应该 640X1136 。但以下代码返回的图片大小仅为 320X568

注意:如果我使用Apple的私有API UIGetScreenImage(),则会返回大小 640X1136 的图片。

   -(UIImage*)getScreenShot:(CALayer*)layer 
    {
            UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0.0);
            [layer renderInContext:UIGraphicsGetCurrentContext()];
            UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            return image;
    }

       [self getScreenShot:self.window.layer];

有没有办法让屏幕截图大小 640X1136 而不使用苹果公司的私有API?

3 个答案:

答案 0 :(得分:2)

-(UIImage*)getScreenShot:(CALayer*)layer
{
    CGFloat scale = 1.0;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){
        scale = [[UIScreen mainScreen] scale];
    }
#endif
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(layer.frame.size.width*scale, layer.frame.size.height*scale), NO, 0.0);
    [layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

答案 1 :(得分:1)

如果您使用的是iOS 7,则可以使用专为拍摄屏幕截图设计的新方法drawViewHierarchyInRect:afterScreenUpdates:(请查看此文档链接,了解有关BOOL参数的信息renderInContext: 1}}方法)。
如果不是,您可以使用旧方法UIGraphicsBeginImageContextWithOptions。如果您仅定位到iOS 7,则可以删除以下drawViewHierarchyInRect:afterScreenUpdates:声明。

if

UIVIew *window = [UIApplication sharedApplication].delegate.window; CGRect rect = window.bounds; UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { [window drawViewHierarchyInRect:rect afterScreenUpdates:NO]; } else { [window.layer renderInContext:UIGraphicsGetCurrentContext()]; } UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // image now contains a screen shot 参数确保屏幕截图的分辨率正确,将scale传递给size表示它将使用0值。 [UIScreen mainScreen].scale可能会将其scale报告为非视网膜,但其size将正确为UIImage,此值用于计算像素图像根据文档的大小:

  

如果将图像的逻辑大小(存储在{{3}}属性中)乘以此属性中的值,则可以获得图像的尺寸(以像素为单位)。

答案 2 :(得分:0)

试试这个,

  UIGraphicsBeginImageContext(self.bounds.size);    

  UIGraphicsBeginImageContext(CGSizeMake(640X1136));