0

在我的应用程序中,用户可以在照片上贴上贴纸。当他们去保存他们的创作时,我会抓取屏幕并将其存储在UIImage

UIGraphicsBeginImageContextWithOptions(self.mainView.bounds.size, NO, [UIScreen mainScreen].scale);
[self.mainView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultImage = [UIGraphicsGetImageFromCurrentImageContext() retain];
UIGraphicsEndImageContext();

(其中self.mainView有一个UIImageView包含照片的子视图,以及另一个UIView包含贴纸的子视图)。

我想知道,是否可以以这种方式进行屏幕截图,并保持上述照片的分辨率?

4

2 回答 2

1

以下将“扁平化”两个UIImages 为一个,同时保持原始图像的分辨率:

CGSize photoSize = photoImage.size;
UIGraphicsBeginImageContextWithOptions(photoSize, NO, 0.0);

CGRect photoRect = CGRectMake(0, 0, photoSize.width, photoSize.height);
// Add the original photo into the context
[photoImage drawInRect:photoRect];
// Add the sticker image with its upper left corner set to where the user placed it
[stickerImage drawAtPoint:stickerView.frame.origin];

// Get the resulting 'flattened' image
UIImage *flattenedImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

以上假设photoImageandstickerImage都是 and 的实例,UIImage并且stickerViewUIView包含 the 的stickerImage,因此将能够使用stickerView框架来确定其来源。

如果您有多个贴纸,只需遍历集合即可。

于 2013-08-14T08:23:32.633 回答
0

如果您要保存当前视图的图像,那么这可能会对您有所帮助。

UIGraphicsBeginImageContext(self.scrollView.contentSize);

[self.scrollView.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGImageRef imageRef = CGImageCreateWithImageInRect(finalImage.CGImage,
                                                   CGRectMake(scrollView.contentOffset.x,     scrollView.contentOffset.y,
                                                              scrollView.frame.size.width, scrollView.frame.size.height));

UIImage *screenImage = [UIImage imageWithCGImage:imageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];

CGImageRelease(imageRef);
于 2013-08-14T08:11:20.600 回答