2011-09-15 15 views
7

Estoy intentando capturar (captura de pantalla) una vista. Para eso estoy usando un fragmento de código que se muestra a continuación que lo guarda en mi directorio de documentos como una imagen PNG.Pantalla de captura

UIGraphicsBeginImageContextWithOptions(highlightViewController.fhView.centerView.frame.size, YES, 1.0); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"1.png"]; 
NSData *imageData = UIImagePNGRepresentation(screenshot); 
[imageData writeToFile:appFile atomically:YES]; 
UIGraphicsEndImageContext(); 

Pregunta: ¿puedo capturar parte de la vista? Porque en el código anterior no puedo cambiar el origen (marco). Si alguien tiene otro enfoque para capturar una parte particular de la vista, por favor compártelo.

+0

Usted desea capturar sólo el código? ¿O algún atajo puede funcionar para ti? – Nitish

+0

Gracias por su reproducción, quiero capturar usando solo código. – ajay

Respuesta

6

Se podría recortar la imagen: http://iosdevelopertips.com/graphics/how-to-crop-an-image.html

CGRect rect = CGRectMake(0,0,10,10); 
CGImageRef imageRef = CGImageCreateWithImageInRect([screenshot CGImage], rect); 
UIImage *croppedScreenshot = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); 
+2

+1 funciona gracias por su ayuda – ajay

+1

¡Me alegro de poder ayudarlo! –

0

ver si se puede especificar el rect como este y luego tomar captura de pantalla.

CGRect requiredRect = CGRectMake(urView.frame.origin.x, urView.frame.origin.y, urView.bounds.size.width, urView.bounds.size.height); 
UIGraphicsBeginImageContext(requiredRect.size); 

Puede modificar el origen y ver si funciona. Si esto no funciona, puede intentar recortar la imagen como se menciona en @mcb

+0

Hola, es la pregunta sobre recortar o capturar. Creo que se trata de capturar la imagen sin embargo. Puede ser que tu percepción sea diferente a la mía. Pero buena respuesta de todos modos :) –

+0

@Parth Bhatt: En realidad, recortar era otra opción. Eso es todo. – visakh7

+0

Gracias por su respuesta, quiero la captura de pantalla en la vista en una parte en particular. – ajay

1

Pruebe este código. Esto seguramente funciona como lo he implementado en muchos de mis proyectos:

- (UIImage *)image 
{ 
    if (cachedImage == nil) { 
     //YOU CAN CHANGE THE FRAME HERE TO WHATEVER YOU WANT TO CAPTURE 
     CGRect imageFrame = CGRectMake(0, 0, 400, 300); 
     UIView *imageView = [[UIView alloc] initWithFrame:imageFrame]; 
     [imageView setOpaque:YES]; 
     [imageView setUserInteractionEnabled:NO]; 

     [self renderInView:imageView withTheme:nil];   

     UIGraphicsBeginImageContext(imageView.bounds.size); 
      CGContextRef c = UIGraphicsGetCurrentContext(); 
      CGContextGetCTM(c); 
      CGContextScaleCTM(c, 1, -1); 
      CGContextTranslateCTM(c, 0, -imageView.bounds.size.height); 
      [imageView.layer renderInContext:c]; 
      cachedImage = [UIGraphicsGetImageFromCurrentImageContext() retain]; 

      // rescale graph 
      UIImage* bigImage = UIGraphicsGetImageFromCurrentImageContext(); 
      CGImageRef scaledImage = [self newCGImageFromImage:[bigImage CGImage] scaledToSize:CGSizeMake(100.0f, 75.0f)]; 
      cachedImage = [[UIImage imageWithCGImage:scaledImage] retain]; 
      CGImageRelease(scaledImage); 
     UIGraphicsEndImageContext(); 

     [imageView release]; 
    } 

    return cachedImage; 
} 

Espero que esto te ayude.

0

Usted puede utilizar este código

UIGraphicsBeginImageContext(self.view.bounds.size); 

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

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
CGRect rect; 
rect = CGRectMake(250,61 ,410, 255); 
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect); 

UIImage *img = [UIImage imageWithCGImage:imageRef]; 

UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
CGImageRelease(imageRef); 
Cuestiones relacionadas