UIGraphicsBeginImageContext with parameters

后端 未结 5 1347
忘了有多久
忘了有多久 2021-02-19 19:06

I am taking a screenshot in my application. I am able to take the screenshot.

Now I want to take the screenshot by specifying the x and y coordinate. Is that possible?

相关标签:
5条回答
  • 2021-02-19 19:18

    Just do something like this, way easier than all those complex calculations

    + (UIImage *)imageWithView:(UIView *)view {
        UIGraphicsBeginImageContextWithOptions([view bounds].size, NO, [[UIScreen mainScreen] scale]);
    
        [[view layer] renderInContext:UIGraphicsGetCurrentContext()];
    
        UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    
        return result;
    }
    
    0 讨论(0)
  • 2021-02-19 19:20
    UIGraphicsBeginImageContext(self.view.bounds.size);
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(c, 0, -40);    // <-- shift everything up by 40px when drawing.
    [self.view.layer renderInContext:c];
    UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    0 讨论(0)
  • 2021-02-19 19:26

    If you're using a newer retina display device, your code should factor in the resolution by using UIGraphicsBeginImageContextWithOptions instead of UIGraphicsBeginImageContext:

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,YES,2.0);
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(c, 0, -40);    // <-- shift everything up by 40px when drawing.
    [self.view.layer renderInContext:c];
    UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    

    This will render the retina display image context.

    0 讨论(0)
  • 2021-02-19 19:32

    swift version

        UIGraphicsBeginImageContext(self.view.bounds.size)
        let image: CGContextRef = UIGraphicsGetCurrentContext()!
        CGContextTranslateCTM(image, 0, -40)
        // <-- shift everything up by 40px when drawing.
        self.view.layer.renderInContext(image)
        let viewImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil)
    
    0 讨论(0)
  • 2021-02-19 19:34

    Here is Swift version

    //Capture Screen
    func capture()->UIImage {
    
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, UIScreen.mainScreen().scale)
        self.view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    
    }
    
    0 讨论(0)
提交回复
热议问题