Un contexte en niveaux de gris avec Quartz2D
yageek
Membre
Bonjour à tous /smile.png' class='bbc_emoticon' alt=':)' />
J'ai un petit soucis de compréhension concernant les contextes graphiques sous Quart2D. Plus précisément, je souhaite créer un contexte de Bitmap en niveau de gris afin de dessiner soit en blanc soit en noir.
J'ai commencé par créer un contexte de niveaux de gris sans transparence (alpha) :
Je dessine en utilisant des couleurs en niveaux de gris définies comme suit :
Malheureusement, tout mon dessin est noir à chaque fois /sad.png' class='bbc_emoticon' alt=':(' />
Par contre si je déclare le contexte en kCGImageAlphaOnly et que que j'utilise des couleurs comme suit :
le dessin en noir et blanc fonctionne.
J'aimerai comprendre pourquoi dans un cas, cela marche et l'autre non ??!!!
Merci pour votre aide /smile.png' class='bbc_emoticon' alt=':)' />
J'ai un petit soucis de compréhension concernant les contextes graphiques sous Quart2D. Plus précisément, je souhaite créer un contexte de Bitmap en niveau de gris afin de dessiner soit en blanc soit en noir.
J'ai commencé par créer un contexte de niveaux de gris sans transparence (alpha) :
<br />
CGContextRef MyCreateBitmapContext (int pixelsWide,<br />
int pixelsHigh)<br />
{<br />
CGContextRef context = NULL;<br />
CGColorSpaceRef colorSpace;<br />
void * bitmapData;<br />
int bitmapByteCount;<br />
int bitmapBytesPerRow;<br />
<br />
bitmapBytesPerRow = (pixelsWide);// 1<br />
bitmapByteCount = (bitmapBytesPerRow * pixelsHigh);<br />
<br />
colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericGray);// 2<br />
bitmapData = malloc ( bitmapByteCount );// 3<br />
if (bitmapData == NULL)<br />
{<br />
fprintf (stderr, "Memory not allocated!");<br />
return NULL;<br />
}<br />
context = CGBitmapContextCreate (bitmapData,// 4<br />
pixelsWide,<br />
pixelsHigh,<br />
8, // bits per component<br />
bitmapBytesPerRow,<br />
colorSpace,<br />
kCGImageAlphaNone);<br />
<br />
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);<br />
CGContextSetShouldAntialias(context, NO);<br />
<br />
if (context== NULL)<br />
{<br />
free (bitmapData);// 5<br />
fprintf (stderr, "Context not created!");<br />
return NULL;<br />
}<br />
CGColorSpaceRelease( colorSpace );// 6<br />
<br />
return context;// 7<br />
}<br />
Je dessine en utilisant des couleurs en niveaux de gris définies comme suit :
<br />
switch(color){<br />
case WHITE: CGContextSetGrayFillColor(drawContext, 0,0); break;<br />
case BLACK: CGContextSetGrayFillColor(drawContext, 0,1); break;<br />
}<br />
Malheureusement, tout mon dessin est noir à chaque fois /sad.png' class='bbc_emoticon' alt=':(' />
Par contre si je déclare le contexte en kCGImageAlphaOnly et que que j'utilise des couleurs comme suit :
<br />
switch(color){<br />
case WHITE: CGContextSetGrayFillColor(drawContext, 0,0); break;<br />
case BLACK: CGContextSetGrayFillColor(drawContext, 1,0); break;<br />
}<br />
le dessin en noir et blanc fonctionne.
J'aimerai comprendre pourquoi dans un cas, cela marche et l'autre non ??!!!
Merci pour votre aide /smile.png' class='bbc_emoticon' alt=':)' />
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu devrais donc avoir:
Blanc:
Noir:
ça marche dans le second cas parce que tu modifies la couche alpha, au lieu de la couche grise.
(P.S.: Il n'est plus nécessaire de réserver la mémoire soi-même dans les versions récentes d'iOS et OS X. On peux passer NULL pour bitmapData).
en fait je pensais qu'en choisissant un contexte avec un espace de couleur de gris sans opacité, je la valeur de l'opacité dans la définition de la couleur était neutre alors que pas du tout.
Il fallait donc bien mettre la valeur d'opacité à 1 !!!
Merci pour cette réponse rapide /tongue.png' class='bbc_emoticon' alt=':P' />