Sam Jarman
Sam Jarman

Reputation: 7377

Merge two UIImages

I have imageA (taken from the users iPhone camera) and imageB, an image with a silly boarder (for eg) with plenty of transparent alpha space.

What I would like to to do is to merge these two images, laying imageB over imageA, and then saving them as imageC for other work.

Is there a way to do this?

Cheers

I've got this so far

-(void)merge
{
    CGSize size = CGSizeMake(320, 480);
    UIGraphicsBeginImageContext(size);

    CGPoint thumbPoint = CGPointMake(0,0);
    UIImage *imageA = imageView.image;
    [imageA drawAtPoint:thumbPoint];

    UIImage* starred = [UIImage imageNamed:@"imageB.png"];

    CGPoint starredPoint = CGPointMake(0, 0);
    [starred drawAtPoint:starredPoint];

    UIImage *imageC = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    imageView.image = imageC;
}

I can't see/dont know what I'm doing wrong here

Upvotes: 11

Views: 5180

Answers (2)

Geva
Geva

Reputation: 820

Note that for retina support you should use: UIGraphicsBeginImageContextWithOptions(size, YES, 0); // 0 means let iOS deal with scale for you

Upvotes: 3

Justin Spahr-Summers
Justin Spahr-Summers

Reputation: 16973

That code looks correct (though I would recommend converting it to use a created CGBitmapContext for thread-safety), but is imageB supposed to be a JPEG? JPEGs don't support transparency, so, in order for the blending to work, it should really be a PNG.

Upvotes: 3

Related Questions