2012-04-04 13 views
9

En mi aplicación estoy usando un método de captura de pantalla. En mi iPad 2 es muy rápido (alrededor de 130 ms) para ejecutar este método. Pero en el nuevo iPad (sin duda debido a la resolución más alta y la misma CPU) ¡está tardando 700 ms! ¿Hay alguna forma de optimizar mi método? Tal vez hay una forma de trabajar directamente con la tarjeta gráfica.iPad 3 lenta captura de pantalla

Aquí es mi método de captura de pantalla:

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

}

Gracias por su ayuda.

+0

No puedo ayudarlo aquí. Pero creo que 700ms es realmente lento. ¿No debería ser como 130ms * 4 = 520ms? –

+0

Intente utilizar 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, 0.0f);' en lugar de 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, [UIScreen mainScreen] .scale);'. Esto hará una captura de pantalla 1: 1. ¿O hay una razón específica por la que necesita '[UIScreen mainScreen] .scale' allí? –

+0

@Jenox sí, depende, pero se parece más a 700ms. – Pierre

Respuesta

3

Creo que fue el desarrollador de Flipboard hablando sobre este tema en un podcast. Es un problema real con el iPad 3, porque han cuadruplicado los píxeles.

Lo que estaba haciendo era tomar la captura de pantalla con anterioridad en segundo plano, no cuando el usuario iniciaba la acción, en este caso cuando el usuario "volteaba" la página.

No sé si esto lo ayudará en su caso, pero sin duda es un enfoque viable para muchos casos.

0

Esto puede o no ser suficiente para su aplicación, pero una opción es reducir la captura de pantalla, p. pase 0.5 como su factor de escala a UIGraphicsBeginImageContextWithOptions. 4 veces más rápido, pero la compensación es una pérdida de detalle/resolución.

Cuestiones relacionadas