Axes dans une pictureBox

sebbur Messages postés 39 Date d'inscription lundi 9 mai 2016 Statut Membre Dernière intervention 27 juillet 2016 - 11 mai 2016 à 16:42
sebbur Messages postés 39 Date d'inscription lundi 9 mai 2016 Statut Membre 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,

2 réponses

sebbur Messages postés 39 Date d'inscription lundi 9 mai 2016 Statut Membre Dernière intervention 27 juillet 2016
4 juil. 2016 à 10:06
Petit up parce que mon problème persiste..
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
5 juil. 2016 à 12:20
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.
0
sebbur Messages postés 39 Date d'inscription lundi 9 mai 2016 Statut Membre Dernière intervention 27 juillet 2016
5 juil. 2016 à 13:24
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
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9 > sebbur Messages postés 39 Date d'inscription lundi 9 mai 2016 Statut Membre Dernière intervention 27 juillet 2016
5 juil. 2016 à 16:24
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
0
sebbur Messages postés 39 Date d'inscription lundi 9 mai 2016 Statut Membre Dernière intervention 27 juillet 2016
5 juil. 2016 à 16:27
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.
0
Rejoignez-nous