在我的应用中,用户可以将贴纸放在照片上。当他们去保存他们的创作时,我会抓一个屏幕并将其存储在UIImage
:
UIGraphicsBeginImageContextWithOptions(self.mainView.bounds.size, NO, [UIScreen mainScreen].scale);
[self.mainView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultImage = [UIGraphicsGetImageFromCurrentImageContext() retain];
UIGraphicsEndImageContext();
(其中self.mainView
有一个包含照片的子视图UIImageView
,另一个包含贴纸的子视图UIView
。
我想知道,是否有可能以这种方式进行屏幕截图,并保持上述照片的分辨率?
答案 0 :(得分:1)
以下内容会将两个UIImage
拼凑成一个,同时保持原始图像的分辨率:
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();
以上假设photoImage
和stickerImage
都是UIImage
的实例,而stickerView
是UIView
,其中包含stickerImage
,因此能够使用stickerView
帧来确定其来源。
如果你有多个贴纸,只需遍历整个系列。
答案 1 :(得分: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);