2011-09-15 180 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);