[Graphics32] Zoom incohérent sur un ImgView32

cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 19 déc. 2005 à 14:43
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 20 déc. 2005 à 09:58
Bonjour à tous,

J'ai un TImgView32 sur lequel je dessine dans le onPaint avec le pen comme ça:
with TPositionedLayer(Sender).GetAdjustedLocation do begin
for l := 1 to 3 do begin // Faire un trait de 3 pixels d'épaisseurs
Buffer.MoveTo(Round(gauche)+l,Round(Top));
Buffer.LineToAS(Round(gauche)+l,Round(Bottom));
end;
end;

Et tout marche à merveille, seulement, lorsque je veux faire un zoom (avant ou arrière, peu importe):
s := ImgView.Scale / 1.1;
if s < 0.2 then s := 0.2;
ImgView.Scale := s;

Mon trait, lui, n'est pas zoomé, il prend la même place qu'avant.

Comment cela se fait-ce ?
un pixel ne devrait pas prendre la même place lorsqu'il est zoomé !!!

Merci d'avance.

4 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 déc. 2005 à 15:35
je serais presque sur en disant :

lineTo c'est du vectoriel donc si tu zoom, ça garde la meme taille.

essaye plutot en faisant :

with TPositionedLayer(Sender).GetAdjustedLocation do begin
Buffer.Pen.Width := 3;
Buffer.MoveTo(Round(gauche),Round(Top));
Buffer.LineToAS(Round(gauche),Round(Bottom));
end;
end;

si bien sur ton Timgview32 accepte "pen.width"

La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
19 déc. 2005 à 15:58
Salut F0xi,

Il n'y a pas de pen.width si on ne passe pas par le canvas, de plus, il faut des gros arrondis aux extremités, j'aimerais donc m'en abstenir.

Mais c'est dingue, le MoveTo(gauche+1,0) doit déplacer d'un pixel, nan ?
Donc, selon que l'image soit zoomée ou non, le pixel doit prendre plus ou moins de place...

Pourquoi non ?
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 déc. 2005 à 18:24
c'est une trés bonne question.

en effet le moveto deplace de 1 pixel.

et meme si, c'etait du vrai vectoriel, tu devrais voir apparaitre 3 lignes et non 1 seule.

aprés savoir si :

le scale opere uniquement dans le canvas.
le scale opere dans tout l'objet.

La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 déc. 2005 à 09:58
Scale opère aussi sur les calques, mais pas leur contenu...

En fait, lorsque tu zoome, le calque est redimmensionné en conséquence mais c'est juste un effet graphique car l'unité graphique reste inchangée.

J'ai essayé avec un calcul de coeff mais c'est illogique car si on fait un zoom*3, il faut dessiner 9 lignes au lieu de 3...
Ca peut marcher éventuellement mais si je fait un zoom/4 ???
0
Rejoignez-nous