2011-09-15 13 views
7

Próbuję uchwycić (zrzut ekranu) widok. Do tego używam kawałka kodu pokazanego poniżej, który zapisuje go do mojego katalogu dokumentu jako obraz PNG.Przechwytywanie ekranu

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

Pytanie: Czy mogę uchwycić część widoku? Ponieważ w powyższym kodzie nie mogę zmienić początku (ramki). Jeśli ktoś ma inne podejście do uchwycenia określonej części widoku, prosimy o udostępnienie go.

+0

chcesz uchwycić tylko z kodem? A może jakiś skrót może ci pomóc? – Nitish

+0

Dzięki za powtórkę, chcę przechwycić tylko za pomocą kodu. – ajay

Odpowiedz

6

Można przyciąć obraz: 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 dziękuję za pomoc – ajay

+1

Cieszę się, że mogę Ci pomóc! –

0

Sprawdź, czy możesz określić rect jak ta, a następnie podjąć zrzut ekranu.

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

Możesz zmienić pochodzenie i sprawdzić, czy działa. Jeśli to się nie uda, możesz spróbować przyciąć obraz, jak wspomniano w @mcb

+0

Cześć, jest pytanie o kadrowanie lub przechwytywanie. Myślę jednak, że chodzi o przechwytywanie obrazu. Być może twoja percepcja różni się od mojej. Ale i tak dobra odpowiedź :) –

+0

@Parth Bhatt: Właściwie przycinanie było inną opcją. To wszystko. – visakh7

+0

Dzięki za odpowiedź chcę, aby zrzut ekranu na widoku w określonej części. – ajay

1

Spróbuj tego kodu. To na pewno działa tak, jak go wdrożyłem w wielu moich projektach:

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

Mam nadzieję, że to ci pomoże.

0

Można użyć tego kodu

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); 
Powiązane problemy