COMPARER DEUX PICTUREBOX C#

Fermé
ninjago72 Messages postés 26 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 28 mai 2017 - 29 mars 2017 à 13:14
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 - 28 mai 2017 à 17:37
Bonjour ! Tout est dans le titre : je voudrais comparer deux images (contenues dans des picturebox). Je pensais à un genre de code comme ça :
if (picturebox1.image == picturebox6.image)
me.backgroundimage = my.resources.ciel

Pour ceux qui auraient besoin, voilà le code :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace météo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
{

}

private void Valider_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("https://www.google.fr/webhp?sourceid=chrome-instant&rlz=1C1CHBF_frFR724FR724&ion=1&espv=2&ie=UTF-8#q=m%C3%A9t%C3%A9o+" + textBox1.Text + "%C3%A9&*");



}

private void timer1_Tick(object sender, EventArgs e)

{
pictureBox1.ImageLocation = webBrowser1.Document.GetElementById("wob_tci").GetAttribute("src");
label1.Text = webBrowser1.Document.GetElementById("wob_tm").InnerText;
label3.Text = "Précipitations " + webBrowser1.Document.GetElementById("wob_pp").InnerText;
label5.Text = "Humidité " + webBrowser1.Document.GetElementById("wob_hm").InnerText;
label6.Text = "Vent " + webBrowser1.Document.GetElementById("wob_ws").InnerText;
label2.Text = webBrowser1.Document.GetElementById("wob_loc").InnerText;
label4.Text = webBrowser1.Document.GetElementById("wob_dc").InnerText;
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
timer1.Interval = 2000;
timer1.Start();
}

private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
timer2.Interval = 100;
timer2.Start();
}

private void timer2_Tick(object sender, EventArgs e)
{
pictureBox2.ImageLocation = webBrowser2.Document.GetElementById("image").GetAttribute("src");
timer2.Stop();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void textBox1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{

if (radioButton1.Checked == true)
webBrowser2.Navigate("http://www.cartesfrance.fr/meteo/");
if (radioButton1.Checked == false)
timer1.Stop();

}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{

if (radioButton2.Checked == true)

webBrowser3.Navigate("http://vigilance.meteofrance.com/");

if (radioButton2.Checked == false)
timer2.Stop();

}

private void timer3_Tick(object sender, EventArgs e)
{
pictureBox2.ImageLocation = webBrowser3.Document.GetElementById("cr").GetAttribute("src");

timer3.Stop();

}

private void pictureBox2_Click(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{

}

private void webBrowser3_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
timer3.Start();
}

private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
}

private void textBox1_TextChanged_1(object sender, EventArgs e)
{

}


private void pictureBox4_Click(object sender, EventArgs e)
{

pictureBox2.Visible = true;
radioButton1.Visible = true;
radioButton2.Visible = true;
webBrowser2.Navigate("http://www.cartesfrance.fr/meteo/");

}

private void pictureBox5_Click(object sender, EventArgs e)
{
pictureBox2.Visible = false;
radioButton1.Visible = false;
radioButton2.Visible = false;
}
}
}
A voir également:

2 réponses

sensa6on Messages postés 130 Date d'inscription vendredi 19 octobre 2012 Statut Membre Dernière intervention 26 octobre 2018 78
18 avril 2017 à 16:48
Le problème avec l'instruction
pictureBox1.Image == pictureBox6.Image
c'est que tu compares des références vers des images.

Si jamais tu veux comparer deux images au pixel près et que tu n'utilises pas la même référence lors de l'affectation cela pourrait retourner
false
alors que les deux images sont identiques.

Dans ce cas tu peux utiliser une petite astuce qui consiste à mettre un tag à une image à chaque affectation, puis ensuite tu compares les tags.

pictureBox1.Image = "chemin vers mon image ou ressource";
pictureBox1.Image.Tag = "mon tag"; //exemple : "ciel"

pictureBox2.Image = "chemin vers mon image ou ressource";
pictureBox2.Image.Tag = "mon tag"; //exemple : "terre"

if (pictureBox1.Image.Tag == pictureBox2.Image.Tag)
{
...
}
1
ninjago72 Messages postés 26 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 28 mai 2017 84
28 mai 2017 à 16:08
Salut merci de ta réponse ! Je vais essayer ça tout de suite ! ;)
0
ninjago72 Messages postés 26 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 28 mai 2017 84
28 mai 2017 à 16:37
Salut je viens d'essayer le code sur l'un des "si" :
if (label4.Text == "Temps clair avec quelques nuages")
if (label7.Text == "lundi 8:00" || label7.Text == "lundi 9:00" //Je ne met pas tout les jours avec toutes les heures car il y en a beaucoup trop pour le mettre en message sur ce site
this.BackgroundImage = Properties.Resources.sunny;
else
pictureBox1.Image = Properties.Resources.lune;
pictureBox1.Image.Tag = "lune";

pictureBox24.Image = Properties.Resources.sunnyicon;
pictureBox24.Image.Tag = "sunny";

if (pictureBox1.Image.Tag == pictureBox24.Image.Tag)
{
MessageBox.Show("ok");

}
Mais le problème est qu'il me dit le message "ok" même quand les images sont différentes. Aurais-tu une autre solution ?
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
28 mai 2017 à 17:37
Bonjour

pour comparer de façon certaine deux images, au pixel près, il n'y a qu'une solution -> comparer tous les pixels: deux boucles for imbriquées et on regarde la couleur de chaque pixel, dès qu'il y a une paire différente l'image est différente. Cette méthode exclue très rapidement des images très différentes. C'est plus long s'il n'y a que quelques pixels qui diffèrent et si ceux-ci sont à la fin de tes boucles.
Une autre option est de faire un hachage de l'image (md5 par exemple par ce que l'outil existe dans la framework), tu transfères tes images en tableau de byte et tu fais le hachage, s'ils sont différents les images sont forcément différentes. Il peut y avoir un faux positif (on appelle ça une collision) mais c'est suffisamment rare (je l'ai testé à deux nombreuses reprises sur des images en niveau de gris ou il n'y a qu'un pixel différent d'un point sur 256) pour considérer que 2 hachages identiques viennent de 2 images identiques
0