iOS屏幕截图的一部分

时间:2012-10-02 09:38:27

标签: objective-c ios xcode

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

-(IBAction) screenShot: (id) sender{

 UIGraphicsBeginImageContext(sshot.frame.size);
 [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
 UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 UIImageWriteToSavedPhotosAlbum(viewImage,nil, nil, nil);


}

这很好但我需要能够定位我截取屏幕截图的位置基本上我只需要在屏幕的三分之一处(中心部分)。我尝试使用

UIGraphicsBeginImageContext(CGSize 150,150);

但是已经发现每件东西都取自0,0坐标,任何人都知道如何正确定位。

4 个答案:

答案 0 :(得分:29)

截图是从您绘制的画布中截取的。 因此,不是在整个上下文中绘制图层,而是使用左上角的引用,而是将其绘制到您想要截取屏幕截图的位置....

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

答案 1 :(得分:14)

来自this

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

答案 2 :(得分:7)

如果您的图像具有特定的矩形裁剪,请使用此方法进行裁剪:

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

答案 3 :(得分:0)

如果您愿意,可以参考this代码。

在此示例中,您可以从任何位置和任何缩放比例获取rect所覆盖的图像。

快乐编码:)

一些提取的参考代码如下

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

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

有关如何使用该示例的详细信息,请参阅here

享受编码:)