3

我正在合并两个图像,然后通过应用以下代码截取屏幕截图:

UIGraphicsBeginImageContext(size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
img_AddText=viewImage;

[dragView removeFromSuperview];
imgV_SelectedImg.image=nil;
imgV_SelectedImg.image=img_AddText;
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

问题是当最终图像失去其质量时,它会变得模糊。

4

5 回答 5

9

尝试使用 UIGraphicsBeginImageContext 的 withOptions 版本

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
于 2012-06-13T18:04:15.980 回答
2

我得到了高质量和特定屏幕位置的快照。通过这段代码。

-(UIImage *)takeScreenShot
{
    CGRect grabRect;
    grabRect = CGRectMake(0,70,320,260);
    UIGraphicsBeginImageContextWithOptions(grabRect.size, self.view.opaque, 0.0);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(ctx, -grabRect.origin.x, -grabRect.origin.y);
    [self.view.layer renderInContext:ctx];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return viewImage;
}

它给了我很好的快照..

于 2014-07-19T10:30:46.767 回答
1

UIGraphicsBeginImageContextWithOptions(大小,否,2.0);这通过将规模从 1.0 增加到 2.0 来解决我的问题

于 2012-06-14T06:45:41.660 回答
1

我在课堂上做了一个类别UIImage,可能会对你有所帮助。它是这样的:

+ (UIImage*)imageWithView:(UIView *)view opaque:(BOOL)opaque bgColor:(UIColor*)bgColor{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, opaque, [[UIScreen mainScreen] scale]);

    if(!opaque){
        [bgColor set];
    }
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

这对我来说可以。未检测到模糊。尝试使用它。如果您仍然拥有它,那么问题很可能出在您的保存代码中......

干杯... :)

于 2012-06-13T20:13:40.927 回答
0

您是否提供了用于视网膜显示的图像?你应该检查一下。您可能正在模拟器中运行(在视网膜中)。

于 2012-06-13T17:57:46.763 回答