pantalla mini laptop hacer como captura apple ios xcode uiimage thumbnails

ios - mini - como hacer captura de pantalla en pc windows 10



Capture una captura de pantalla de UIView-Slow Performance (2)

Tengo una aplicación de dibujo, me gustaría crear una instantánea del Canvas UIView (tanto dentro como fuera de la pantalla) y luego reducirla. El código que tengo para hacer eso toma sangrienta para siempre en un iPad 3. Simulador no hay retraso. El lienzo es 2048x2048.

¿Hay alguna otra forma en que debería estar haciendo esto? O algo que extraño en el código?

¡Gracias!

-(UIImage *) createScreenShotThumbnailWithWidth:(CGFloat)width{ // Size of our View CGSize size = editorContentView.bounds.size; //First Grab our Screen Shot at Full Resolution UIGraphicsBeginImageContext(size); [editorContentView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //Calculate the scal ratio of the image with the width supplied. CGFloat ratio = 0; if (size.width > size.height) { ratio = width / size.width; } else { ratio = width / size.height; } //Setup our rect to draw the Screen shot into CGSize newSize = CGSizeMake(ratio * size.width, ratio * size.height); //Send back our screen shot return [self imageWithImage:screenShot scaledToSize:newSize]; }


¿ Utilizaste el instrumento "Time Profiler" (menú "Producto" -> "Perfil") para verificar en qué parte del código pasas la mayor parte del tiempo? (Úselo con su dispositivo por supuesto, no el simulador, para tener un perfil realista). Supongo que no está en la porción de captura de imagen que citó en su pregunta, sino en su método de imageWithImage:scaledToSize: method.

En lugar de representar la imagen en su tamaño completo en un contexto, y luego redimensionar la imagen al tamaño final, debe representar la capa en el contexto directamente en el tamaño esperado aplicando alguna transformación afín al contexto .

Simplemente use CGContextConcatCTM(someScalingAffineTransform); en UIGraphicsGetCurrentContext() justo después de su línea UIGraphicsBeginImageContext(size); , para aplicar una transformación afín de escalado que hará que la capa se represente a una escala / tamaño diferente.

De esta manera, se representará directamente como el tamaño esperado, que será mucho más rápido, en lugar de renderizado al 100% y luego tendrá que volver a escalarlo de una manera que consume mucho tiempo.


Gracias AliSoftware , aquí está el código que terminé usando:

-(UIImage *) createScreenShotThumbnailWithWidth:(CGFloat)width{ if (IoUIDebug & IoUIDebugSelectorNames) { NSLog(@"%@ - %@", INTERFACENAME, NSStringFromSelector(_cmd) ); } // Size of our View CGSize size = editorContentView.bounds.size; //Calculate the scal ratio of the image with the width supplied. CGFloat ratio = 0; if (size.width > size.height) { ratio = width / size.width; } else { ratio = width / size.height; } CGSize newSize = CGSizeMake(ratio * size.width, ratio * size.height); //Create GraphicsContext with our new size UIGraphicsBeginImageContext(newSize); //Create Transform to scale down the Context CGAffineTransform transform = CGAffineTransformIdentity; transform = CGAffineTransformScale(transform, ratio, ratio); //Apply the Transform to the Context CGContextConcatCTM(UIGraphicsGetCurrentContext(),transform); //Render our Image into the the Scaled Graphic Context [editorContentView.layer renderInContext:UIGraphicsGetCurrentContext()]; //Save a copy of the Image of the Graphic Context UIImage* screenShot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return screenShot; }