0

我的视图控制器中有一个 UIImageView 我需要拍摄它的截图。上面还有一个 UILabel 。UIImageView 并没有覆盖整个页面,只是其中的一部分。我怎样才能截取屏幕的一部分?

我敢打赌这个问题之前已经被问过,但我查看了这篇文章如何使用 UIGraphicsBeginImageContextWithOptions?它只是与未定义的变量混淆

在此处输入图像描述

到目前为止,我拥有的代码截取了整件事的屏幕截图。(不是我想要的)。我尝试使用 screenRect 没有任何效果。我想在拍摄全屏截图后裁剪图片,但问题是每个设备 iphone3、iphone4、iphone5、iPad 1、2、3 等的裁剪尺寸会有所不同。

所以我的问题是有没有办法在不经过裁剪路线的情况下截取一段屏幕截图?如果裁剪是唯一的方法,那么有没有一种方法可以可靠地剪切图片而不必担心具有高/低像素的不同 iOS 设备?

testBgImgVw = [[UIImageView alloc] initWithFrame:CGRectMake(0, 80, 320, 220)];

....

    -(IBAction) takeScreenshot
    {
        CGRect screenRect = [[UIScreen mainScreen] bounds];

        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
        {
            //its iphone
            screenRect  = CGRectMake(0, 0, 320, 480);
        }
        else
        {
            //its pad
            screenRect  = CGRectMake(0, 0, 768, 1024);
        }


        // This code is for high resolution screenshot
        UIGraphicsBeginImageContextWithOptions(screenRect.size, NO, 0.0);
        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();


        NSData* imageData = UIImageJPEGRepresentation(viewImage, 1.0);
        NSString* incrementedImgStr = [NSString stringWithFormat: @"UserScreenShotPic.jpg"];

        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString* documentsDirectory = [paths objectAtIndex:0];

        // Now we get the full path to the file
        NSString* fullPathToFile2 = [documentsDirectory stringByAppendingPathComponent:incrementedImgStr];
        [imageData writeToFile:fullPathToFile2 atomically:NO];


    }
4

1 回答 1

1

好的,如果您只想捕获图像和图像上的标签(如果您可以确保标签始终在图像上),那么

在 imageview 上添加标签(imageview addSubview:label)

然后将其渲染为新图像

UIGraphicsBeginImageContextWithOptions(screenRect.size, NO,[[UIScreen mainScreen]scale]);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

完毕 :)

如果你想拍摄几个 uiviews(imageview、label 等),最好的方法是提供一个 UIView 画布

UIView *canvasView = [[UIView alloc]......]
[self.view addSubview:canvasView];

并添加您想要在其上渲染的每个视图,最后将其渲染为您想要的新图像

于 2013-04-19T16:54:53.867 回答