2011-09-15 94 views
7

我試圖捕捉(截屏)的景色。爲此,我使用下面顯示的一段代碼將其保存到我的文檔目錄中作爲PNG圖像。捕獲屏幕

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

問題:我可以捕獲部分視圖嗎?因爲在上面的代碼中,我無法更改原點(框架)。如果任何人有其他方法來捕捉視圖的特定部分,請分享它。

+0

你想從唯一的代碼來捕捉?或者有些捷徑可以爲你工作? – Nitish

+0

感謝您的重播,我只想使用代碼捕獲。 – ajay

回答

6

你可以裁切圖像: 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了您的幫助 – ajay

+1

工作謝謝,我很高興我能幫助你! –

0

看看你是否可以指定這樣的矩形,然後採取截圖。

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

您可以更改原點並查看它是否有效。 如果這個不奏效,你可以嘗試裁剪圖像由@mcb

+0

嗨,是關於裁剪或捕捉的問題。我認爲這是關於捕捉圖像。可能你的看法與我的不同。但好的答案:) –

+0

@Parth Bhatt:其實種植是另一種選擇。就這樣。 – visakh7

+0

感謝您的回答,我希望在特定部分的視圖上捕獲屏幕。 – ajay

1

試試這個代碼中提到。這肯定工作,因爲我已經在我的許多項目中實施它:

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

我希望這會幫助你。

0

您可以使用此代碼

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