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,