J'écris quelques lignes de code pour se familiariser avec les bases de Quartz 2d. J'essaye de dessiner et d'image puis de l'effacer dans le mode de fusion kCGBlendModeClear. Voici le code de mon code UIView
de sous-classe, dont la couleur arrière-plan est à l'orange par IB:kCGBlendModeClear ne s'efface pas, pourquoi?
- (void)drawRect:(CGRect)rect {
UIImage *brush = [UIImage imageNamed:@"brush.png"] ;
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(ctx,kCGBlendModeNormal);
CGContextDrawImage(ctx, CGRectMake(100, 100, 26, 25), [brush CGImage]);
CGContextSetBlendMode(ctx, kCGBlendModeClear);
CGContextSetFillColorWithColor(ctx, [UIColor clearColor].CGColor);
CGContextFillEllipseInRect(ctx, CGRectMake(110, 110, 5, 5)); // HERE!
}
lecture de la documentation et this question Je pensais que la ligne marquée ICI produirait un trou dans l'image que j'avais déjà dessiné. Au lieu de cela, il crée un cercle noir (devrait être orange). Pour déboguer, j'ai essayé d'ajouter ma vue personnalisée à une vue orange. Cette fois, ma vue personnalisée a un fond noir. Le trou de la ligne ICI est correct, mais je me demande pourquoi la couleur noire de la vue. Encore plus bizarre, si je fais myView.backgroundColor, je peux définir une couleur d'arrière-plan (cela ne devrait-il pas être annulé par mon implémentation de drawRect?). Il me manque clairement quelques notions de base sur Quartz, quelqu'un peut-il m'aider?
Davide
deux subquestion: 1) vous voyez kCGBlendModeClea comme un moyen viable pour mettre en œuvre un outil de caoutchouc? 2) Pourriez-vous m'en dire plus sur R? – nutsmuggler
1) Non. 'R = 0' est assez inutile, vous ne pouvez même pas définir la couleur claire. 2) Les modes de fusion peuvent être exprimés en termes de R, S et D, où S est le pixel source, D est le pixel de destination et R est le pixel résultant. Cela vous donne un raccourci pratique pour décrire les modes de mélange, par exemple, 'R = S + D * (1 - Sa)' pour la source-over ('kCGBlendModeNormal') Il est assez bien expliqué dans les commentaires commençant par CGContext.h: 84 –
Merci! J'avais deviné que ModeCLear n'était pas la réponse, mais c'est sympa d'avoir une confirmation. – nutsmuggler