Axes dans une pictureBox

Messages postés
39
Date d'inscription
lundi 9 mai 2016
Dernière intervention
27 juillet 2016
- - Dernière réponse : sebbur
Messages postés
39
Date d'inscription
lundi 9 mai 2016
Dernière intervention
27 juillet 2016
- 5 juil. 2016 à 16:27
Bonjour à tous,

Je voulais dessiner des axes (x, y) dans une pictureBox et intégrer deux boutons de zoom (in/out) dans ma WinForm qui agissent donc sur cette pictureBox.
Voici l'extrait de code :


private Image monImage = null;
private Image bmpAxis = null;

private Rectangle rectImage = Rectangle.Empty;

public Form1()
{
InitializeComponent();
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;//normal
}
private void Form1_Load(object sender, EventArgs e)
{
monImage = pictureBox1.Image;
bmpAxis = new Bitmap(monImage.Width, monImage.Height);
rectImage = new Rectangle(0, 0, monImage.Width, monImage.Height);

pictureBox1.Invalidate();
}
private void button1_Click(object sender, EventArgs e)
{
DessineSurBitmap();
pictureBox1.Invalidate();
}
Single factZoom = 1.0f;
Single inc = 0.25f;
Single zmax = 3.0f;
Single zmin = 0.25f;
private void btnZoomPlus_Click(object sender, EventArgs e)
{
factZoom += inc;
factZoom = Math.Min(zmax, factZoom);
pictureBox1.Invalidate();

}

private void btnZoomMoins_Click(object sender, EventArgs e)
{

factZoom -= inc;
factZoom = Math.Max(zmin, factZoom);
pictureBox1.Invalidate();
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics gr = e.Graphics;

gr.ResetTransform();
Matrix m = new Matrix();
m.Scale(factZoom, factZoom);
gr.Transform = m;
if (monImage != null)
{
// Dessine monImage

gr.DrawImage(monImage, rectImage);
}
// Dessine bmpAxis
if (checkBox1.Checked)
{
gr.DrawImage(bmpAxis, rectImage);
}
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
DessineSurBmpAxis();
pictureBox1.Invalidate();
}
// Dessine sur la bitmap
private void DessineSurBitmap()
{

if (monImage == null) return;


using (Graphics gr = Graphics.FromImage(monImage))
{
Rectangle rectDessin;
rectDessin = new Rectangle(50, 75, 300, 200);
gr.DrawRectangle(Pens.White, rectDessin);

rectDessin = new Rectangle(80, 120, 300, 400);
gr.DrawEllipse(Pens.White, rectDessin);

Point P1 = new Point(100, 60);
Point P2 = new Point(25, 350);
gr.DrawLine(Pens.White, P1, P2);

}
}

// Dessine sur la bitmap des Axes
private void DessineSurBmpAxis()
{

bmpAxis = new Bitmap(bmpAxis, rectImage.Size);
using (Graphics grAxis = Graphics.FromImage(bmpAxis))
{
using (Pen penAxe = new Pen(Color.Red, 4.0f))
{
grAxis.DrawLine(penAxe, 0, bmpAxis.Height - 1024,
bmpAxis.Width , bmpAxis.Height - 1024);
grAxis.DrawLine(penAxe, 0 + 1024, 0, 0 + 1024, bmpAxis.Height);

}
}
}


Alors voilà mon problème. Dans un projet simple, le code fonctionne très bien et j'obtiens le résultat que je souhaite.
En revanche, quand j'intègre ce code dans un autre projet où ma pictureBox affiche une photo/vidéo dynamiquement (via une webcam par exemple) rien ne fonctionne. Je n'ai pas d'erreur mais les boutons de zoom n'ont aucun effet et la checkBox provoque une exception lorsque je change son état.

Je vous remercie par avance de votre aide et de vos réponses,
Afficher la suite 

Votre réponse

2 réponses

Messages postés
39
Date d'inscription
lundi 9 mai 2016
Dernière intervention
27 juillet 2016
0
Merci
Petit up parce que mon problème persiste..
Commenter la réponse de sebbur
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
0
Merci
Bonjour,

1. Quelle est l'exception provoquée?
2. Si tu mets ton code dans une classe, tu la debug bien avec le projet simple, et lorsque tu l'utiliseras dans un autre plus complexe cela devrait fonctionner.

Bonne journée.
sebbur
Messages postés
39
Date d'inscription
lundi 9 mai 2016
Dernière intervention
27 juillet 2016
-
Bonjour,

Tout d'abord je te remercie pour ta réponse.
En fait maintenant les axes s'affichent dans ma pictureBox, mais lorsque j'applique un dézoom sur mon image (le capteur de ma caméra a une résolution de 2048 px * 2048 px) les axes ne s'affichent plus correctement.

Je peux tracer une ligne dans la pictureBox et lorsque je trace cette ligne les axes apparaissent de manière aléatoire et ils ne restent pas affichés.

J'aurai voulu savoir comment je peux faire pour que les axes restent affichés dans ma pictureBox même après avoir appliqué un dézoom sur mon image.

Merci d'avance,

Sebbur
cgandco
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
> sebbur
Messages postés
39
Date d'inscription
lundi 9 mai 2016
Dernière intervention
27 juillet 2016
-
Si je comprends bien, test axes doivent rester fixe par rapport a ton picturebox. et ne pas changer de taille ni de position. (verticalement a gauche et horizontalement en bas.

et tu devras mettre aussi des boutons pour déplacement de l'image avec le zoom > 1.



Bonne journée
sebbur
Messages postés
39
Date d'inscription
lundi 9 mai 2016
Dernière intervention
27 juillet 2016
-
J'ai dû mal m'exprimer désolé. J'aimerai justement que mes axes suivent mon zoom in/out lors de l'appuie sur le bouton. Actuellement mes axes semblent suivre mon zoom in/out mais une fois que j'ai appuyé sur un des deux boutons pour zoomer ou dézoomer, l'affichage n'est pas continuel et il est aléatoire.
Commenter la réponse de cgandco

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.