UIGraphicsBeginImageContext с параметрами - PullRequest
12 голосов
/ 16 ноября 2010

Я делаю скриншот в моем приложении.Я могу сделать снимок экрана.

Теперь я хочу сделать снимок экрана, указав координаты x и y.Это возможно?

UIGraphicsBeginImageContext( self.view.bounds.size );
[self.view.layer renderInContext:UIGraphicsGetCurrentContext(  )];
UIImage* aImage = UIGraphicsGetImageFromCurrentImageContext(  );

Ответы [ 5 ]

18 голосов
/ 16 ноября 2010
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();
2 голосов
/ 01 сентября 2014

Если вы используете более новое устройство отображения сетчатки, ваш код должен учитывать разрешение, используя UIGraphicsBeginImageContextWithOptions вместо 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();

Это отобразит контекст изображения на сетчатке.

0 голосов
/ 29 июня 2016

Быстрая версия

    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 голосов
/ 04 марта 2016

Вот версия Swift

//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 голосов
/ 22 сентября 2015

Просто сделайте что-то вроде этого, намного проще, чем все эти сложные вычисления

+ (UIImage *)imageWithView:(UIView *)view {
    UIGraphicsBeginImageContextWithOptions([view bounds].size, NO, [[UIScreen mainScreen] scale]);

    [[view layer] renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...