OVH Cloud OVH Cloud

comment tracer des lignes plus fines ?

6 réponses
Avatar
warda
Les lignes que j'obtiens avec Gdi ,line sur un picture box sont trop grosses
meme avec une valeur de 1 ! alors que mon ecran m'affiche des lignes beaucoup
plus fines sur des controles ou autres.....
comment tracer des lignes fines ? ,mon picture box lui meme as t'il une
resolution propre ? une unité de mesure differente ?
merci de vos conseils :)

6 réponses

Avatar
TroXsA
Bonjour,

J'ai le meme probleme et effectivement si y a une solution j'aimerais bien
la connaitre

Merci d'avance

Cordialement,

Site : http://www.troxsa.info
Mail : http://cerbermail.com/?rIXgaw9Xsl


"warda" a écrit dans le message de news:

Les lignes que j'obtiens avec Gdi ,line sur un picture box sont trop
grosses
meme avec une valeur de 1 ! alors que mon ecran m'affiche des lignes
beaucoup
plus fines sur des controles ou autres.....
comment tracer des lignes fines ? ,mon picture box lui meme as t'il une
resolution propre ? une unité de mesure differente ?
merci de vos conseils :)



Avatar
AlexC
il n'est pas possible de dessiner des ligne d'une épaisseur de moins d'un
pixel !
lorsque l'on cree la ligne de cette maniere :

Graphics.DrawLine(new pen(color.black,1),10,10,10,10)
On cree une ligne de couleur noire, d'une largeur d'un pixel et sur un écran
on ne peut pas se allumer un pixel à moitier :o)

Sauf erreur de ma part ^^


"warda" a écrit dans le message de news:

Les lignes que j'obtiens avec Gdi ,line sur un picture box sont trop
grosses
meme avec une valeur de 1 ! alors que mon ecran m'affiche des lignes
beaucoup
plus fines sur des controles ou autres.....
comment tracer des lignes fines ? ,mon picture box lui meme as t'il une
resolution propre ? une unité de mesure differente ?
merci de vos conseils :)



Avatar
warda
bon alors regarde les lignes qui separent les rubriques de cette page ! elles
sont au minimum 4 fois plus fines que ce que l'on obtien avec une ligne dite
de "1 pixel" sur mon picture box !,donc ya quelque part une notion de pixel
qui m'echappe :p
a mois que ce ne soit une histoire de resolution interne aux controles....


"AlexC" a écrit :

il n'est pas possible de dessiner des ligne d'une épaisseur de moins d'un
pixel !
lorsque l'on cree la ligne de cette maniere :

Graphics.DrawLine(new pen(color.black,1),10,10,10,10)
On cree une ligne de couleur noire, d'une largeur d'un pixel et sur un écran
on ne peut pas se allumer un pixel à moitier :o)

Sauf erreur de ma part ^^


"warda" a écrit dans le message de news:

> Les lignes que j'obtiens avec Gdi ,line sur un picture box sont trop
> grosses
> meme avec une valeur de 1 ! alors que mon ecran m'affiche des lignes
> beaucoup
> plus fines sur des controles ou autres.....
> comment tracer des lignes fines ? ,mon picture box lui meme as t'il une
> resolution propre ? une unité de mesure differente ?
> merci de vos conseils :)
>





Avatar
Patrice
Si le trait fait bien plus d'un pixel de large et s'agissant d'un contrôle
PictureBox je pense à un problème de mode d'affichage (mode "stretched").

--
Patrice

"warda" a écrit dans le message de news:

bon alors regarde les lignes qui separent les rubriques de cette page !
elles
sont au minimum 4 fois plus fines que ce que l'on obtien avec une ligne
dite
de "1 pixel" sur mon picture box !,donc ya quelque part une notion de
pixel
qui m'echappe :p
a mois que ce ne soit une histoire de resolution interne aux controles....


"AlexC" a écrit :

il n'est pas possible de dessiner des ligne d'une épaisseur de moins d'un
pixel !
lorsque l'on cree la ligne de cette maniere :

Graphics.DrawLine(new pen(color.black,1),10,10,10,10)
On cree une ligne de couleur noire, d'une largeur d'un pixel et sur un
écran
on ne peut pas se allumer un pixel à moitier :o)

Sauf erreur de ma part ^^


"warda" a écrit dans le message de
news:

> Les lignes que j'obtiens avec Gdi ,line sur un picture box sont trop
> grosses
> meme avec une valeur de 1 ! alors que mon ecran m'affiche des lignes
> beaucoup
> plus fines sur des controles ou autres.....
> comment tracer des lignes fines ? ,mon picture box lui meme as t'il
> une
> resolution propre ? une unité de mesure differente ?
> merci de vos conseils :)
>







Avatar
Mehdi
On Mon, 3 Apr 2006 14:35:26 +0200, Patrice wrote:

Si le trait fait bien plus d'un pixel de large et s'agissant d'un contrôle
PictureBox je pense à un problème de mode d'affichage (mode "stretched").



Je ne pense pas que cela ait quoique ce soit a voir avec le mode de la
picturebox. Lorsque l'on dessine sur une picturebox, on dessine sur le
controle lui-meme, pas sur l'image placée dans la picture box. C'est pour
cela qu'il est souvent plus judicieux de ne pas utiliser de picture box du
tout et de dessiner l'image a la main - une ligne de code: plus simple,
plus flexible et évite les problemes du genre : "J'ai dessiné sur une image
dans une picture box. Comment je fais pour sauver mon image maintenant ?".
A moins que l'on ne parle ici d'un controle dérivé d'une picture box et non
d'une picturebox, dans lequel cas les choses sont sans doute un peu plus
compliquées.

Je viens d'essayer de dessiner une ligne dans l'évenement Paint de ma
picture box :

private void pictureBox1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawLine(Pens.Aquamarine, // Width 1 par défaut
pictureBox1.Location.X + 10,
pictureBox1.ClientRectangle.Top,
pictureBox1.Location.X + 10,
pictureBox1.ClientRectangle.Bottom);
}

Ca me fait une ligne d'épaisseur 1 pixel sans aucun doute possible (Win XP
SP2, .NET 1.1, VS 2003, carte graphique ATI je-ne-sais-quoi, écran LCD DELL
17'' 1280*1024).

Le probleme vient peut etre du mode d'interpolation
(Graphics.InterpolationMode) utilisé qui peut dans certains cas épaissir
les courbes. Possible aussi si l'antialias a été activé
(Graphics.SmoothingMode). Ou encode si l'unité de mesure de l'object
Graphics utilisé a été modifié (Graphics.PageUnit et Graphics.PageScale).
Ou encore si une Transform (Graphics.Transform) a été appliquée a l'insu de
son plein gré.
Avatar
Patrice
Si le problème persiste, le plus simple est sans doute de fournir le code
minimal permettant de reproduire le problème pour que l'on puisse se rendre
compte exactement de ce qui est fait...

--
Patrice

"Mehdi" a écrit dans le message de news:

On Mon, 3 Apr 2006 14:35:26 +0200, Patrice wrote:

Si le trait fait bien plus d'un pixel de large et s'agissant d'un
contrôle
PictureBox je pense à un problème de mode d'affichage (mode "stretched").



Je ne pense pas que cela ait quoique ce soit a voir avec le mode de la
picturebox. Lorsque l'on dessine sur une picturebox, on dessine sur le
controle lui-meme, pas sur l'image placée dans la picture box. C'est pour
cela qu'il est souvent plus judicieux de ne pas utiliser de picture box du
tout et de dessiner l'image a la main - une ligne de code: plus simple,
plus flexible et évite les problemes du genre : "J'ai dessiné sur une
image
dans une picture box. Comment je fais pour sauver mon image maintenant ?".
A moins que l'on ne parle ici d'un controle dérivé d'une picture box et
non
d'une picturebox, dans lequel cas les choses sont sans doute un peu plus
compliquées.

Je viens d'essayer de dessiner une ligne dans l'évenement Paint de ma
picture box :

private void pictureBox1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawLine(Pens.Aquamarine, // Width 1 par défaut
pictureBox1.Location.X + 10,
pictureBox1.ClientRectangle.Top,
pictureBox1.Location.X + 10,
pictureBox1.ClientRectangle.Bottom);
}

Ca me fait une ligne d'épaisseur 1 pixel sans aucun doute possible (Win XP
SP2, .NET 1.1, VS 2003, carte graphique ATI je-ne-sais-quoi, écran LCD
DELL
17'' 1280*1024).

Le probleme vient peut etre du mode d'interpolation
(Graphics.InterpolationMode) utilisé qui peut dans certains cas épaissir
les courbes. Possible aussi si l'antialias a été activé
(Graphics.SmoothingMode). Ou encode si l'unité de mesure de l'object
Graphics utilisé a été modifié (Graphics.PageUnit et Graphics.PageScale).
Ou encore si une Transform (Graphics.Transform) a été appliquée a l'insu
de
son plein gré.