2011-09-15 1 views
7

J'essaie de capturer une vue. Pour cela, j'utilise un morceau de code ci-dessous qui l'enregistre dans mon répertoire de documents sous la forme d'une image PNG.Capturer l'écran

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

Question: Puis-je capturer une partie de la vue? Parce que dans le code ci-dessus je ne peux pas changer l'origine (trame). Si quelqu'un a une autre approche pour capturer une partie de la vue, merci de la partager.

+0

Vous voulez capturer à partir du code seulement? Ou un raccourci peut travailler pour vous? – Nitish

+0

Merci pour votre rejeu, je veux capturer en utilisant du code seulement. – ajay

Répondre

6

Vous pouvez recadrer l'image: 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 merci de votre aide pour votre aide – ajay

+1

Je suis heureux de pouvoir vous aider! –

0

Voyez si vous pouvez spécifier le rect comme celui-ci, puis prendre le screenshot.

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

Vous pouvez modifier l'origine et voir si cela fonctionne. Si cela ne fonctionne pas, vous pouvez essayer de rogner l'image comme indiqué par @mcb

+0

Salut, est la question sur le recadrage ou la capture. Je pense qu'il s'agit de capturer l'image si. Peut être que votre perception est différente de la mienne. Mais bonne réponse de toute façon :) –

+0

@Parth Bhatt: En fait, le recadrage était une autre option. C'est tout. – visakh7

+0

Merci pour votre réponse je veux la capture d'écran sur la vue dans une partie particulière. – ajay

1

Essayez ce code. Cela fonctionne sûrement comme je l'ai mis en œuvre dans plusieurs de mes projets:

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

J'espère que cela vous aidera.

0

Vous pouvez utiliser ce code

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