[Résolu] Détourage d'une image dans une bitmap
Bonjour,
Je reprends une question d'un autre sujet. Dans une classe qui implémente le Drag And Drop, je crée l'image qui sera utilisée pour figurer le déplacement de cette manière:
[self lockFocus];
NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[self bounds]];
[self unlockFocus];
Mais initWithFocusedViewRect fait une "deep copy": tous les pixels de l'écran recouverts par le view.frame sont copiés. Or mon image est ronde (j'utilise un NSBezierPath). Je me retrouve en train de déplacer une partie de l'arrière-plan dans mon image virtuelle. Comment supprimer les pixels indésirables?
Je n'ai trouvé sur le web qu'un exemple (repris trois fois à l'identique sur des sites différents, ce qui est agaçant) mais qui ne donne pas de solution.
J'ai tenté un addClip dans le drawRect, sans succès. J'ai également tenté d'utiliser mon NSBezierPath pour masquer les pixels avant/aprés initWithFocusedViewRect. Il semble que CG utilise toujours un rectangle, et non une "région", comme on disait du temps de QuickDraw.
Dès lors, comment faire? initWithFocusedViewRect est-il la bonne solution? Comment masquer la région extérieure à l'image ronde mais intérieur au bounds rect?
Réponses
Essaye avec cacheDisplayInRect:toBitmapImageRep:
The bitmap produced by this method is transparent (that is, has an alpha value of 0) wherever the receiver and its descendants do not draw any content.
J'ai déjà utilisé cette méthode et ça permet de capturer, par ex, un bouton avec le fond transparent.
Sois loué, mpergand! ça marche exactement comme prévu! Merci!