来自 viewcontroller iOS 的质量传递图像丢失

Loss of quality passing images from viewcontroller iOS

我正在开发一个允许用户在他们的照片上添加面具的应用程序,该应用程序运行良好但我注意到一个问题,我不知道为什么但图像质量下降。 我正在使用此方法将图像传递给视图控制器:

   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

//SETTO STICKERS
UIGraphicsBeginImageContext(CGSizeMake(_Image.frame.size.width, _Image.frame.size.height));
CGContextRef context = UIGraphicsGetCurrentContext();
[_Image.layer renderInContext:context];
UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

appDelegate.ImageEnded = screenShot;
//Instanzio il viewController della main
LastViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"LastVC"];
//Vado alla main
[self presentModalViewController:VC animated:YES];

然后使用 appdelegate 从另一个 ViewController 获取图像,这是我的完整应用程序流程:

FirstScreen(ViewController) -> TakePhoto or Select from gallery ->
AddMask(ViewController) -> AddStickers(ViewController) -> LastViewcontroller(ViewController) .

通过使用 UIGraphicsBeginImageContext ,比例因子参数默认为 1.0。

根据 docs(强调我的):

Discussion This function is equivalent to calling the UIGraphicsBeginImageContextWithOptions function with the opaque parameter set to NO and a scale factor of 1.0.

如果您在 Retina 设备上使用它,您会看到一些质量损失。

你应该使用UIGraphicsBeginImageContextWithOptions,并为比例因子传入0.0,这将默认为当前主屏幕的比例因子。 (1 个用于非视网膜设备,2 个用于视网膜设备)。