2010-09-03 29 views
3

Bien ce que je suis en train de faire est:image masque par une autre image

  • donné une image où il y a un cercle dans cette image qui est « vide ». Je veux prendre une image existante de la bibliothèque d'utilisateur et la masquer de sorte que seulement une certaine partie de cette image soit montrée sur l'image «vide».

J'ai essayé quelques code de masquage mais ils semblent tous de travailler dans l'autre sens ... des conseils sur la façon d'aborder cela?

Répondre

5

Malheureusement, vous ne pouvez pas utiliser CoreAnimation pour ce faire (ce qui rendrait plutôt facile). En regardant la CoreAnimation d'Apple documentation:

iOS Note: En considération de la performance, iOS ne supporte pas la propriété de masque.

Par conséquent, la meilleure façon de le faire est d'utiliser Quartz 2D (comme une réponse here):

CGContextRef mainViewContentContext; 
CGColorSpaceRef colorSpace; 

colorSpace = CGColorSpaceCreateDeviceRGB(); 

// create a bitmap graphics context the size of the image 
mainViewContentContext = CGBitmapContextCreate (NULL, targetSize.width, targetSize.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast); 

// free the rgb colorspace 
CGColorSpaceRelease(colorSpace);  

if (mainViewContentContext==NULL) 
    return NULL; 

CGImageRef maskImage = [[UIImage imageNamed:@"mask.png"] CGImage]; 
CGContextClipToMask(mainViewContentContext, CGRectMake(0, 0, targetSize.width, targetSize.height), maskImage); 
CGContextDrawImage(mainViewContentContext, CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledWidth, scaledHeight), self.CGImage); 


// Create CGImageRef of the main view bitmap content, and then 
// release that bitmap context 
CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext); 
CGContextRelease(mainViewContentContext); 

// convert the finished resized image to a UIImage 
UIImage *theImage = [UIImage imageWithCGImage:mainViewContentBitmapContext]; 
// image is retained by the property setting above, so we can 
// release the original 
CGImageRelease(mainViewContentBitmapContext); 

// return the image 
return theImage;