Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Prblème pour redésinner a partir d'une image de base

5 réponses
Avatar
Stéphane
Bonjour,

Voilà mon problème, je voudrais dessiner une image de base qui me sert de
fond et ensuite reprende cette image et rajouter des éléments. Je dessine
donc mon image avec cette procédure :

Dim ImageSize As New System.Drawing.Size(300, 200)
Dim Image As System.Drawing.Image = New
System.Drawing.Bitmap(ImageSize.Width, ImageSize.Height)
Dim Graphics As System.Drawing.Graphics =
System.Drawing.Graphics.FromImage(Image)
Dim i
Dim ImgFormant As System.Drawing.Imaging.ImageFormat =
System.Drawing.Imaging.ImageFormat.Bmp
Graphics.Clear(System.Drawing.Color.White)

For i = 2 To n_point1
Graphics.DrawLine(System.Drawing.Pens.Black, New
System.Drawing.Point(x1(i),y1(i)), New System.Drawing.Point(x2(i),y2(i))
Next

PictureBox1.Image = Image


Et ensuite je voudrait la récupérer pour la modifier, dans une nouvelle
procédure je fait donc un :
Image = PictureBox1.Image pour récupérer l'image
je fait mes rajouts, et je fait un
PictureBox2.Image = Image pour l'afficher

Voilà la procédure :

Dim ImageSize As New System.Drawing.Size(300, 200)
Dim Image As System.Drawing.Image = New
System.Drawing.Bitmap(ImageSize.Width, ImageSize.Height)
Dim Graphics As System.Drawing.Graphics =
System.Drawing.Graphics.FromImage(Image)
Dim ImgFormant As System.Drawing.Imaging.ImageFormat =
System.Drawing.Imaging.ImageFormat.Bmp
Graphics.Clear(System.Drawing.Color.White) '// Remplie la couleur de
fond de l'image

Image = PictureBox1.Image

Graphics.DrawLine(System.Drawing.Pens.Black, New
System.Drawing.Point(0, 0), New System.Drawing.Point(200, 200))

PictureBox2.Image = Image

Le problème c'est que les éléments que je rajoute n'apparaisent pas, seul
l'image d'origine est présente, ou est ce que je fait une erreur ?

Merci d'avance

Cordialement

Stéphane

5 réponses

Avatar
Alex C.
On 8 sep, 10:55, "Stéphane"
c.fr> wrote:
Bonjour,

Voilà mon problème, je voudrais dessiner une image de base qui me ser t de
fond et ensuite reprende cette image et rajouter des éléments. Je des sine
donc mon image avec cette procédure :

        Dim ImageSize As New System.Drawing.Size(300, 200)
        Dim Image As System.Drawing.Image = New
System.Drawing.Bitmap(ImageSize.Width, ImageSize.Height)
        Dim Graphics As System.Drawing.Graphics =
System.Drawing.Graphics.FromImage(Image)
        Dim i
        Dim ImgFormant As System.Drawing.Imaging.ImageFormat =
System.Drawing.Imaging.ImageFormat.Bmp
        Graphics.Clear(System.Drawing.Color.White)

        For i = 2 To n_point1
                Graphics.DrawLine(System.Drawing.Pens.Bla ck, New
System.Drawing.Point(x1(i),y1(i)), New System.Drawing.Point(x2(i),y2(i))
        Next

        PictureBox1.Image = Image

Et ensuite je voudrait la récupérer pour la modifier, dans une nouvel le
procédure je fait donc un :
        Image = PictureBox1.Image pour récupérer l'image
je fait mes rajouts, et je fait un
        PictureBox2.Image = Image pour l'afficher

Voilà la procédure :

        Dim ImageSize As New System.Drawing.Size(300, 200)
        Dim Image As System.Drawing.Image = New
System.Drawing.Bitmap(ImageSize.Width, ImageSize.Height)
        Dim Graphics As System.Drawing.Graphics =
System.Drawing.Graphics.FromImage(Image)
        Dim ImgFormant As System.Drawing.Imaging.ImageFormat =
System.Drawing.Imaging.ImageFormat.Bmp
        Graphics.Clear(System.Drawing.Color.White) '// Remplie la couleur de
fond de l'image

        Image = PictureBox1.Image

        Graphics.DrawLine(System.Drawing.Pens.Black, New
System.Drawing.Point(0, 0), New System.Drawing.Point(200, 200))

        PictureBox2.Image = Image

Le problème c'est que les éléments que je rajoute n'apparaisent pas , seul
l'image d'origine est présente, ou est ce que je fait une erreur ?

Merci d'avance

Cordialement

Stéphane



Bonjour,

Essayez de cloner l'image avant de l'affecter à une variable, car en
faisant Image = PictureBox1.Image , c'est une affectation par
référence et non par "valeur", et donc le "flux", de dessin est le
même.

Essayez comme ceci :

Image = PictureBox1.Image.clone
Avatar
Alex C.
On 8 sep, 14:25, "Alex C." wrote:
On 8 sep, 10:55, "Stéphane"



c.fr> wrote:
> Bonjour,

> Voilà mon problème, je voudrais dessiner une image de base qui me s ert de
> fond et ensuite reprende cette image et rajouter des éléments. Je d essine
> donc mon image avec cette procédure :

>         Dim ImageSize As New System.Drawing.Size(300, 200)
>         Dim Image As System.Drawing.Image = New
> System.Drawing.Bitmap(ImageSize.Width, ImageSize.Height)
>         Dim Graphics As System.Drawing.Graphics =
> System.Drawing.Graphics.FromImage(Image)
>         Dim i
>         Dim ImgFormant As System.Drawing.Imaging.ImageFormat =
> System.Drawing.Imaging.ImageFormat.Bmp
>         Graphics.Clear(System.Drawing.Color.White)

>         For i = 2 To n_point1
>                 Graphics.DrawLine(System.Drawing.Pens.B lack, New
> System.Drawing.Point(x1(i),y1(i)), New System.Drawing.Point(x2(i),y2(i) )
>         Next

>         PictureBox1.Image = Image

> Et ensuite je voudrait la récupérer pour la modifier, dans une nouv elle
> procédure je fait donc un :
>         Image = PictureBox1.Image pour récupérer l'image
> je fait mes rajouts, et je fait un
>         PictureBox2.Image = Image pour l'afficher

> Voilà la procédure :

>         Dim ImageSize As New System.Drawing.Size(300, 200)
>         Dim Image As System.Drawing.Image = New
> System.Drawing.Bitmap(ImageSize.Width, ImageSize.Height)
>         Dim Graphics As System.Drawing.Graphics =
> System.Drawing.Graphics.FromImage(Image)
>         Dim ImgFormant As System.Drawing.Imaging.ImageFormat =
> System.Drawing.Imaging.ImageFormat.Bmp
>         Graphics.Clear(System.Drawing.Color.White) '// Remplie la couleur de
> fond de l'image

>         Image = PictureBox1.Image

>         Graphics.DrawLine(System.Drawing.Pens.Black, New
> System.Drawing.Point(0, 0), New System.Drawing.Point(200, 200))

>         PictureBox2.Image = Image

> Le problème c'est que les éléments que je rajoute n'apparaisent p as, seul
> l'image d'origine est présente, ou est ce que je fait une erreur ?

> Merci d'avance

> Cordialement

> Stéphane

Bonjour,

Essayez de cloner l'image avant de l'affecter à une variable, car en
faisant Image = PictureBox1.Image , c'est une affectation par
référence et non par "valeur", et donc le "flux", de dessin est le
même.

Essayez comme ceci :

Image = PictureBox1.Image.clone


une autre petite chose à laquelle je n'ai pas fait attention : l'objet
graphics n'est pas le bon, il faut en recréer un correspondant à la
deuxième image.
Avatar
Stéphane
Merci pour ta réponse.

Essayez de cloner l'image avant de l'affecter à une variable, car en
faisant Image = PictureBox1.Image , c'est une affectation par
référence et non par "valeur", et donc le "flux", de dessin est le
même.

Essayez comme ceci :

Image = PictureBox1.Image.clone


une autre petite chose à laquelle je n'ai pas fait attention : l'objet
graphics n'est pas le bon, il faut en recréer un correspondant à la
deuxième image.



J'ai fait l'éssai en rajoutant le .clone
pour l'objet graphics, c'est le même nom dans mes 2 exemples de codes, mais
il sont déclaré dans 2 procédure différentes, ce ne sont pas les même.
Par acquis de consience, j'ai tout mis dans la même procédure avec une
double déclaration de variable : graphics et graphics2 ....

Ca ne change rien, quand je redessine une ligne, cela n'apparait toujours
pas.

Cordialement
Avatar
Patrice
Dans le code de départ, l'objet Graphics vers lequel on dessine prend une
image vierge comme point de départ et ensuite on utilise l'image d'origine
sans se préoccuper de ce que l'on vient de dessiner. Si je comprends bien ce
que tu veux faire cela donnerait qq chose comme :

Dim img As Image = CType(PictureBox1.Image.Clone, Image) ' Copier
l'image de base
Dim g As Graphics = Graphics.FromImage(img) ' Créer un outil de
dessin sur cette image de base
g.DrawLine(Pens.Black, 0, 0, 10, 10) ' Dessiner
g.Dispose() ' Clore la phase de dessin
PictureBox2.Image = img ' Afficher la nouvelle image

Je soupcçonne une peite incompréhension sur les objets ou l'utilisation du
graphics (ce n'est pas parce qu'on change après coup la même variable que
celle utilisée précédemment pour créer le "Graphics" que cela change la
surface de destination pour les dessins, ce qui compte est la valeur de la
valeur au moement de la création du "Graphics").

--
Patrice


"Stéphane" a écrit dans le
message de groupe de discussion : ##
Merci pour ta réponse.

Essayez de cloner l'image avant de l'affecter à une variable, car en
faisant Image = PictureBox1.Image , c'est une affectation par
référence et non par "valeur", et donc le "flux", de dessin est le
même.

Essayez comme ceci :

Image = PictureBox1.Image.clone


une autre petite chose à laquelle je n'ai pas fait attention : l'objet
graphics n'est pas le bon, il faut en recréer un correspondant à la
deuxième image.



J'ai fait l'éssai en rajoutant le .clone
pour l'objet graphics, c'est le même nom dans mes 2 exemples de codes,
mais
il sont déclaré dans 2 procédure différentes, ce ne sont pas les même.
Par acquis de consience, j'ai tout mis dans la même procédure avec une
double déclaration de variable : graphics et graphics2 ....

Ca ne change rien, quand je redessine une ligne, cela n'apparait toujours
pas.

Cordialement




Avatar
Stéphane
Merci, je me doutais bien qu'un truc m'avait échapé.