2010-04-05 3 views
2

J'ai entendu dire qu'il est possible de masquer des vues avec des images en noir et blanc, où le terme "noir" signifie "entièrement transparent" et le terme "blanc" signifie que la vue est visible. La grande différence avec ClipsToBounds est que la vue peut être découpée en formes drôles comme des cercles ou des étoiles. Comment pourrais-je faire ça?Comment masquer une vue avec une image en noir et blanc?

Répondre

4
CGImageRef maskRef = <some cgimage>; 
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), NULL, YES); 
CGContextClipToMask(context, maskRect, mask); 
CGImageRelease(mask); 
4

Regardez fonction

void CGContextClipToMask (
    CGContextRef c, 
    CGRect rect, 
    CGImageRef mask 
); 

Si je comprends bien, il fait exactement ce que vous voulez.

1
CGImageRef maskImage = <Black-White Image> 
const CGFloat components[6] = {0,0,0,0,0,0}; // mask black color 
CGImageRef mask = CGImageCreateWithMaskingColors(maskImage, components); 
CGContextClipToMask(ctx, mask) 
// draw images will be masked 
Questions connexes