W mojej aplikacji używam metody zrzutów ekranu. Na moim iPadzie 2 jest bardzo szybki (około 130 ms), aby wykonać tę metodę. Ale na nowym iPadzie (na pewno ze względu na najwyższą rozdzielczość i ten sam procesor) zajmuje to około 700 ms! Czy istnieje sposób na optymalizację mojej metody? Być może istnieje sposób na bezpośrednią pracę z kartą graficzną?iPad 3 powolny zrzut ekranu
Oto moja metoda screenshot:
- (UIImage *)image {
CGSize imageSize = self.bounds.size;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale);
else UIGraphicsBeginImageContext(imageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, [self center].x, [self center].y);
CGContextConcatCTM(context, [self transform]);
CGContextTranslateCTM(context, -[self bounds].size.width * [[self layer] anchorPoint].x, -[self bounds].size.height * [[self layer] anchorPoint].y);
[[self layer] renderInContext:context];
CGContextRestoreGState(context);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
Dzięki za pomoc.
Nie mogę ci tu pomóc. Ale myślę, że 700ms jest naprawdę powolne. Czy nie powinno to być 130ms * 4 = 520ms? –
Spróbuj użyć 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, 0.0f);' zamiast 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, [UIScreen mainScreen] .scale);'. Spowoduje to zrzut ekranu 1: 1. Czy jest jakiś szczególny powód, dla którego potrzebujesz "[UIScreen mainScreen] .scale"? –
@Jenox tak, to zależy, ale to raczej 700ms. – Pierre