COMPARER DEUX PICTUREBOX C#
ninjago72
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
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;
}
}
}
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:
- COMPARER DEUX PICTUREBOX C#
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Nombre de jours entre deux dates excel - Guide
- Deux whatsapp sur un téléphone - Guide
- Connecter deux airpods mac - Guide
2 réponses
Le problème avec l'instruction
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
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 == pictureBox6.Imagec'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
falsealors 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)
{
...
}
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
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
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 ?