CGContextSetRGBFillColor

muqaddarmuqaddar Administrateur
CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f);
me donne du gris et non du blanc...

Un problème de contexte certainement ? Une idée ?

Réponses

  • AliGatorAliGator Membre, Modérateur
    19:39 modifié #2
    Met le code complet (comment tu récupères le contexte, le code avant et après, etc.)
    Car là  en effet la couleur utilisée c'est du blanc opaque normalement (moi je préfère CGContextSetFillColorWithColor et lui passer la couleur en utilisant [tt][UIColor whiteColor].CGColor[/tt]).
    Donc ça dépend plutôt du reste de ton contexte : alpha appliqué à  ton contexte, blending mode quand tu fait effectivement le CGContextFillRect (ou autre, justement, montre le code), etc...

    Ca peut tout à  fait venir du mode de blending utilisé par exemple, si tu n'utilises pas celui par défaut.
    Qu'est ce que ça donne avec une autre couleur ([UIColor redColor].CGColor, ou blueColor ou greenColor ou même blackColor) ?
  • muqaddarmuqaddar Administrateur
    19:39 modifié #3
    Je pense qu'une opacité s'applique...
    C'est la dernière ligne qui est grise.


    <br />// background<br />	UIView *themeNamelayerView = [[[UIView alloc] initWithFrame:themeNameRect] autorelease];<br />	CALayer *themeNamelayer = themeNamelayerView.layer;	<br />	themeNamelayer.cornerRadius = 20.0;<br />	themeNamelayer.backgroundColor = layerColor.CGColor;	<br />	themeNamelayer.opacity = 0.25;<br />	themeNamelayer.masksToBounds = YES;<br />	[self addSubview:themeNamelayerView];	<br /><br />		<br />	themeNameRect.origin.x += padding;<br />	themeNameRect.size.width = themeNameRect.size.width - padding*2;<br /><br />CGContextRef context = UIGraphicsGetCurrentContext();	<br />	CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f);<br />	[theme._name drawInRect:themeNameRect withFont:[UIFont systemFontOfSize:14] lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
    

  • AliGatorAliGator Membre, Modérateur
    19:39 modifié #4
    Ah, mais tu dessines du texte, pas un rectangle ou des lignes ! (theme._name est une NSString, non ?)
    Pourquoi FillColor et pas StrokeColor, alors du coup ? T'es sûr que c'est FillColor qui s'applique dans ce cas ? (j'avoue je sais pas lequel des deux, je testerai avec les deux moi, pour avoir lequel utiliser)

    Et même si c'était FillColor, n'oublie pas l'effet de l'anti-aliasing qui peut générer ce genre d'effets sur des lignes fines.

    De plus, je sais plus ce que fait "drawInRect" de NSString, si le texte est juste un peu trop grand pour tenir dans le CGRect, est-ce qu'il ne "compresse" pas un peu le texte horizontalement, ce qui aurait encore plus comme effet d'affiner le trait du texte et donc encore de l'antialiasing en perspective ?

    Si tu dessines un rectangle au lieu de dessiner le texte, je te parie que ton rectangle sera rempli en blanc et pas en gris.
  • muqaddarmuqaddar Administrateur
    19:39 modifié #5
    Bon, j'ai trouvé d'où ça vient mais je ne comprends pas pourquoi.

    Déjà  j'ai passé le texte en énorme, et il est toujours gris. Ensuite j'ai dessiné un rectangle, et curieusement, il est blanc dans la partie hors de mon background layer du dessous, mais gris dans la partie qui le recouvre... car ce background layer a une opacité.

    Donc ce que je ne comprends, c'est comment ce background layer (une image dont ont a modifié le layer), qui est au desssous peut-il influencer sur la couleur du dessin qui se positonne au dessus ? Alors que le rectangle est fait après dans l'ordre du code (cf 1er message)?

  • AliGatorAliGator Membre, Modérateur
    19:39 modifié #6
    Bah je te dis, vérifie le blending mode... c'est quoi que tu utilises ? Parce que y'a des blendmodes qui utilisent l'alpha de la source, comme DestinationOut, etc.

    Et puis surtout je me demande si les CALayers se dessinent pas après les drawRect des UIViews.
    Au fait, pourquoi ne pas utiliser un UILabel pour dessiner ton texte ? (à  ajouter en subView du reste hein)
Connectez-vous ou Inscrivez-vous pour répondre.