【问题标题】:Alternative for UIGetScreenImage()UIGetScreenImage() 的替代方法
【发布时间】:2014-04-26 10:40:33
【问题描述】:

从苹果的私有 API UIGetScreenImage() 返回的屏幕截图图像在视网膜显示中为 640x1136,但其他替代代码仅给出 320x568。是否可以在@2x 模式下截屏?

这是我正在使用的代码

-(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];

【问题讨论】:

    标签: ios screenshot retina-display


    【解决方案1】:

    关于如何获取屏幕图像有很多答案。在您的情况下,我猜问题是使用私有 API 您可以获得整个屏幕,在后者中(但如果您不显示一点代码很难说)您只呈现视图的一部分。公共 API 有 2 个选项:

    • renderInContext
    • drawViewHierarchy(仅限 iOS7,可能 >)

    这个 sn-p 总结了 2 个方法,它是一个 UIView 类别,所以你应该在 UIView 对象(或子类)上发送这个消息。将其发送到您获得全屏的窗口

    - (UIImage *) imageByRenderingViewOpaque:(BOOL) yesOrNO {
            UIGraphicsBeginImageContextWithOptions(self.bounds.size, yesOrNO, 0);
    
        if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
            [self drawViewHierarchyInRect:self.bounds afterScreenUpdates:NO];
        }
        else {
            [self.layer renderInContext:UIGraphicsGetCurrentContext()];
        }
        UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return resultingImage;
    }
    - (UIImage *) imageByRenderingView{
        return [self imageByRenderingViewOpaque:NO];
    }
    

    【讨论】:

    • 这基本上是我使用的,对我来说也很好用
    • opengl 内容有所不同,但对于 UIKit 内容,这很好
    • 是的,很遗憾没有 opengl 也没有 AVCapturePreviewLayer :(
    • Daij-Djan 您是否尝试在视网膜显示器中打印返回图像的大小?它没有给出@2x 模式下的尺寸,这意味着屏幕截图尺寸仅为 320X568。但是私有api给出640X1136。因此,如果我在 UIImageView 中使用该图像,它看起来非常清晰。但是上面代码返回的图像有些模糊。
    • @Andrea。我可以得到比例,但真正的问题是,我需要 Retina 显示器中尺寸为 640X1136 的图像。你能得到我吗?因此,只有当我在另一个 uiimageview 中使用该图像时,它才会清晰
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多