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; }
这里给出了如何使用这个例子的细节。
享受编码:)