2012-04-04 10 views
9

Nella mia app sto usando un metodo di screenshot. Sul mio iPad 2 è molto veloce (circa 130 ms) per eseguire questo metodo. Ma sul nuovo iPad (sicuramente a causa della massima risoluzione e della stessa CPU) impiega circa 700 ms! C'è un modo per ottimizzare il mio metodo? Forse c'è un modo per lavorare direttamente con la scheda grafica?iPad 3 slow screenshot

Ecco il mio metodo 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; 

}

Grazie per il vostro aiuto.

+0

Non posso aiutarti qui. Ma penso che 700ms sia veramente lento. Non dovrebbe essere come 130ms * 4 = 520ms? –

+0

Provare a usare 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, 0.0f);' invece di 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, [UIScreen mainScreen] .scale);'. Questo renderà lo screenshot 1: 1. O c'è una ragione specifica per cui hai bisogno di '[UIScreen mainScreen] .scale'? –

+0

@Jenox si, dipende ma è più come 700ms. – Pierre

risposta

3

Penso che sia stato lo sviluppatore di Flipboard a parlare di questo problema su un podcast. È un vero problema con l'iPad 3, perché hanno quadruplicato i pixel.

Quello che stava facendo era prendere lo screenshot in anticipo sullo sfondo, non quando l'utente ha avviato l'azione - nel suo caso quando l'utente "girava" la pagina.

Non so se questo ti aiuterà nel tuo caso, ma è certamente un approccio praticabile per molti casi.

0

Questo può o non può essere sufficiente per l'applicazione, ma un'opzione è quella di ridimensionare lo screenshot, ad es. passare 0,5 come fattore di scala a UIGraphicsBeginImageContextWithOptions. 4x più veloce ma il compromesso è una perdita di dettaglio/risoluzione.