barabashkakvn: Les points sont dessinés sans anticrénelage. J'ai spécifiquement choisi la méthodePixelSetAA- dessiner des points avec un anticrénelage.
Essayez de dessiner une ligne en utilisantPixelSetAA.
La méthode PolylineAA utilise la méthode LineAA. La méthode LineAA utilise la méthode PixelSetAA. En dessinant un seul point, vous ne verrez pas l'effet de l'anticrénelage.
tol64: J'ai complété le message précédent. Notez comment les méthodes ci-dessus sont mises en œuvre et utilisez-les si vous avez besoin d'un lissage.
Je ne touche pas à la méthode de dessin de ligne avec lissage -PolylineAA pour le moment. Je veux comprendre ce qui est dit dans l'aide à propos dePixelSetAA:
PixelSetAA-Dessine un point en utilisant l'algorithme d'anti-crénelage.
Comme cette méthode dessine un point avec anticrénelage, je devrais obtenir une image comme celle-ci si je dessine plusieurs points à la suite :
barabashkakvn: Je ne touche pas à la méthode de dessin d'une ligne avec lissage -PolylineAA pour le moment. Je veux comprendre ce qui est indiqué dans l'aide à propos dePixelSetAA:
PixelSetAA-Dessine un point en utilisant l'algorithme d'anti-crénelage.
Comme cette méthode dessine un point avec anticrénelage, je devrais obtenir une image comme celle-ci si je dessine plusieurs points à la suite:
Mais je n'obtiens pas de points lisses.
C'est pourquoi je vous suggère de comparer le code des méthodes avec et sans anticrénelage. Le code est ouvert à l'étude.
Pour le comprendre, vous devez étudier en profondeur les algorithmes utilisés dans ces méthodes.
Vous pourriez même écrire un article sur ce sujet. Je serais heureux de le lire moi-même. )
komposter: Un point ne peut pas être lissé, il s'agit d'une "particule élémentaire" dans un sens).
Voici donc la question : il existe deux méthodes(PixelSet etPixelSetAA). Je suis très intéressé parPixelSetAA- peut-être ne comprends-je pas comment fonctionne le lissage des points ?
barabashkakvn: Voilà donc la question : il existe deux méthodes(PixelSet etPixelSetAA). Très intéressé parPixelSetAA- peut-être ne comprends-je pas comment fonctionne le lissage des points ?
Nous avons lu l'aide. La question est donc la suivante :"PixelSetAA doit-il dessiner ne serait-ce qu'un seul point en utilisant l'anticrénelage ?". Je veux entendre une opinion.
barabashkakvn: Nous avons lu l'aide. La question est donc la suivante :"PixelSetAA doit-il dessiner ne serait-ce qu'un seul point en utilisant l'anticrénelage ?". Je veux entendre une opinion.
La réponse est la suivante : la méthodePixelSetAAdevrait dessiner ne serait-ce qu'un seul point en utilisant l'anticrénelage, et elle dessine ce point unique en utilisant l'anticrénelage. Pour ce faire, j'ai dû me pencher sur le code du CCanvas :
//+------------------------------------------------------------------+//| Draw pixel with antialiasing |//+------------------------------------------------------------------+void CCanvas::PixelSetAA(constdouble x,constdouble y,constuint clr)
{
staticdouble rr[4];
staticint xx[4];
staticint yy[4];
//--- preliminary calculationsint ix=(int)MathRound(x);
int iy=(int)MathRound(y);
double rrr=0;
double k;
double dx=x-ix;
double dy=y-iy;
uchar a,r,g,b;
uint c;
//--- no need for anti-aliasingif(dx==0.0 && dy==0.0)
{
PixelSet(ix,iy,clr);
return;
}
//--- prepare array of pixels
xx[0]=xx[2]=ix;
yy[0]=yy[1]=iy;
if(dx<0.0)
xx[1]=xx[3]=ix-1;
if(dx==0.0)
xx[1]=xx[3]=ix;
if(dx>0.0)
xx[1]=xx[3]=ix+1;
if(dy<0.0)
yy[2]=yy[2]=iy-1;
if(dy==0.0)
yy[2]=yy[2]=iy;
if(dy>0.0)
yy[2]=yy[2]=iy+1;
//--- calculate radii and sum of their squaresfor(int i=0;i<4;i++)
{
dx=xx[i]-x;
dy=yy[i]-y;
rr[i]=1/(dx*dx+dy*dy);
rrr+=rr[i];
}
//--- draw pixelsfor(int i=0;i<4;i++)
{
k=rr[i]/rrr;
c=PixelGet(xx[i],yy[i]);
a=(uchar)(k*GETRGBA(clr)+(1-k)*GETRGBA(c));
r=(uchar)(k*GETRGBR(clr)+(1-k)*GETRGBR(c));
g=(uchar)(k*GETRGBG(clr)+(1-k)*GETRGBG(c));
b=(uchar)(k*GETRGBB(clr)+(1-k)*GETRGBB(c));
PixelSet(xx[i],yy[i],ARGB(a,r,g,b));
}
}
et j'ai réalisé que le lissage n'apparaît que si vous passez un nombre de type double comme coordonnées, et non pas une valeur arrondie, mais avec une "queue". Quelque chose comme 200.4 ; 125.6 ; 200.7.
Voici une parabole dessinée avec des points en utilisant la méthodePixelSetAA et elle commence à être dessinée avec l'anticrénelage :
Les points sont dessinés sans anticrénelage. J'ai spécifiquement choisi la méthodePixelSetAA- dessiner des points avec un anticrénelage.
Essayez de dessiner une ligne en utilisantPixelSetAA.
La méthode PolylineAA utilise la méthode LineAA. La méthode LineAA utilise la méthode PixelSetAA. En dessinant un seul point, vous ne verrez pas l'effet de l'anticrénelage.
Essayez de dessiner une ligne en utilisantPixelSetAA.
Non. Aucun effet. Aucun point de lissage proche. Les coins pointus sont comme des briques :
Non. Aucun effet. Aucun point de lissage proche. Les coins pointus sont comme des briques:
J'ai complété le message précédent. Notez comment les méthodes ci-dessus sont mises en œuvre et utilisez-les si vous avez besoin d'un lissage.
Comme cette méthode dessine un point avec anticrénelage, je devrais obtenir une image comme celle-ci si je dessine plusieurs points à la suite :
Mais je n'obtiens pas de points lisses.
Je ne touche pas à la méthode de dessin d'une ligne avec lissage -PolylineAA pour le moment. Je veux comprendre ce qui est indiqué dans l'aide à propos dePixelSetAA:
Comme cette méthode dessine un point avec anticrénelage, je devrais obtenir une image comme celle-ci si je dessine plusieurs points à la suite:
Mais je n'obtiens pas de points lisses.
C'est pourquoi je vous suggère de comparer le code des méthodes avec et sans anticrénelage. Le code est ouvert à l'étude.
Pour le comprendre, vous devez étudier en profondeur les algorithmes utilisés dans ces méthodes.
Vous pourriez même écrire un article sur ce sujet. Je serais heureux de le lire moi-même. )
Un point ne peut pas être lissé, il s'agit d'une "particule élémentaire" dans un sens).
Voilà donc la question : il existe deux méthodes(PixelSet etPixelSetAA). Très intéressé parPixelSetAA- peut-être ne comprends-je pas comment fonctionne le lissage des points ?
Si tout le reste échoue, lisez l'aide ;)
PixelSet définit simplement la couleur du point.
Nous avons lu l'aide. La question est donc la suivante :"PixelSetAA doit-il dessiner ne serait-ce qu'un seul point en utilisant l'anticrénelage ?". Je veux entendre une opinion.
La réponse est la suivante : la méthodePixelSetAAdevrait dessiner ne serait-ce qu'un seul point en utilisant l'anticrénelage, et elle dessine ce point unique en utilisant l'anticrénelage. Pour ce faire, j'ai dû me pencher sur le code du CCanvas :
et j'ai réalisé que le lissage n'apparaît que si vous passez un nombre de type double comme coordonnées, et non pas une valeur arrondie, mais avec une "queue". Quelque chose comme 200.4 ; 125.6 ; 200.7.
Voici une parabole dessinée avec des points en utilisant la méthodePixelSetAA et elle commence à être dessinée avec l'anticrénelage :