iOS屏幕截图的一部分

我有一个应用程序,采取以下代码的UIImageView的屏幕截图:

-(IBAction) screenShot: (id) sender{ UIGraphicsBeginImageContext(sshot.frame.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(viewImage,nil, nil, nil); } 

这工作得很好,但我需要能够定位在哪里我截图截图基本上我只需要gradle只有三分之一的屏幕(中心部分)。 我试过使用

 UIGraphicsBeginImageContext(CGSize 150,150); 

但是发现每一件事都是从0,0坐标中得出的,有没有人有任何想法如何正确定位这个。

那么截图是从你画的canvas上取下来的。 因此,不要在整个上下文中绘制图层,而要使用左上angular的引用,将其绘制到想要截取的位置。

 //first we will make an UIImage from your view UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *sourceImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //now we will position the image, X/Y away from top left corner to get the portion we want UIGraphicsBeginImageContext(sshot.frame.size); [sourceImage drawAtPoint:CGPointMake(-50, -100)]; UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(croppedImage,nil, nil, nil); 

从这个

 UIGraphicsBeginImageContext(sshot.frame.size); CGContextRef c = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(c, 150, 150); // <-- shift everything up to required position when drawing. [self.view.layer renderInContext:c]; UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil); 

使用这种方法来裁剪,如果你有特定的图像裁剪:

 -(UIImage *)cropImage:(UIImage *)image rect:(CGRect)cropRect { CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect); UIImage *img = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); return img; } 

像这样使用:

 UIImage *img = [self cropImage:viewImage rect:CGRectMake(150,150,100,100)]; //example 

如果你喜欢,你可以参考这个代码。

在这个例子中,你可以从任何位置和任何缩放比例获得矩形覆盖的图像。

快乐编码:)

一些提取的代码供参考如下

用于裁剪照片的主要function或代码

 - (UIImage *) croppedPhoto { CGFloat ox = self.scrollView.contentOffset.x; CGFloat oy = self.scrollView.contentOffset.y; CGFloat zoomScale = self.scrollView.zoomScale; CGFloat cx = (ox + self.cropRectangleButton.frame.origin.x + 15.0f) * 2.0f / zoomScale; CGFloat cy = (oy + self.cropRectangleButton.frame.origin.y + 15.0f) * 2.0f / zoomScale; CGFloat cw = 300.0f / zoomScale; CGFloat ch = 300.0f / zoomScale; CGRect cropRect = CGRectMake(cx, cy, cw, ch); NSLog(@"---------- cropRect: %@", NSStringFromCGRect(cropRect)); NSLog(@"--- self.photo.size: %@", NSStringFromCGSize(self.photo.size)); CGImageRef imageRef = CGImageCreateWithImageInRect([self.photo CGImage], cropRect); UIImage *result = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); NSLog(@"------- result.size: %@", NSStringFromCGSize(result.size)); return result; } 

这里给出了如何使用这个例子的细节。

享受编码:)