Muzamil Hassan
Muzamil Hassan

Reputation: 851

UIImage screenshot loses its quality

I am merging two images and then I take a screenshot by applying this code:

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);

The problem is that when the final image loses its quality it blurs.

Upvotes: 3

Views: 2994

Answers (5)

Max
Max

Reputation: 2299

i got the snapshot with good quality and particular location of screen. By this code.

-(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;
}

it gives me excellent snapshot..

Upvotes: 2

Muzamil Hassan
Muzamil Hassan

Reputation: 851

UIGraphicsBeginImageContextWithOptions(size, NO, 2.0); this solve my prblem by increasing scale from 1.0 to 2.0

Upvotes: 1

Ariel
Ariel

Reputation: 2440

I've made a category on UIImage class that may help you. It goes like this:

+ (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;
}

It works fine for me. No bluring was detected. Try to use it. If you'll still have it then most likely the problem is in your saving code...

Cheers... :)

Upvotes: 1

Dcritelli
Dcritelli

Reputation: 820

Try using the withOptions version of UIGraphicsBeginImageContext

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);

Upvotes: 9

Kimpoy
Kimpoy

Reputation: 1974

Did you provide an image for retina display? You should check it. You might be running in a simulator (in retina).

Upvotes: 0

Related Questions