C# – Comparando imagens
No seguinte artigo, o autor apresenta uma aplicação Windows Forms para iniciantes na linguagem C# que compara duas imagens e revela se há diferenças entre elas.
Neste artigo vou apresentar uma aplicação Windows Forms para iniciantes na linguagem C#, onde podemos carregar duas imagens e comparar se elas são iguais.
Recursos usados
Criando o projeto Windows Forms
Vamos criar um projeto bem simples do tipo Windows Forms, usando a linguagem C#. No formulário Form1.cs, inclua os seguintes controles a partir da ToolBox:
- 2 LinkLabel: lnklbImagem1 e lnklbImagem2
- 2 PictureBox: picImagem1 e picImagem2
- 1 ProgressBar: 1 pgBar
- 3 Buttons: btnCompararImagens, btnLimpar e btnEncerrar
- 2 OpenFileDialog: ofd1 e ofd2
A seguir, disponha os controles conforme mostra a figura abaixo:

Namespaces usados no projeto:
using System;
using System.Drawing;
using System.Windows.Forms;
Variáveis globais declaradas no formulário:
static string nomeArquivo1, nomeArquivo2;
Bitmap img1, img2;
int contador1 = 0, contador2 = 0;
bool flag = true;
1 – Evento Load do formulário
private void Form1_Load(object sender, EventArgs e)
{
pgBar1.Visible = false;
picImagem1.Visible = true;
picImagem2.Visible = true;
}
2 – Evento Click do link da primeira imagem
private void lnklbImagem1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
ofd1.FileName = "";
ofd1.Title = "Imagens";
ofd1.Filter = "Todas Imagens|*.jpg; *.bmp; *.png";
pgBar1.Value = 0;
pgBar1.Visible = false;
ofd1.ShowDialog();
if (ofd1.FileName.ToString() != "")
{
nomeArquivo1 = ofd1.FileName.ToString();
picImagem1.Image = new Bitmap(nomeArquivo1);
}
}
3 – Evento Click do link da segunda imagem
private void lnklbImagem2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
ofd2.FileName = "";
ofd2.Title = "Imagens";
ofd2.Filter = "Todas Imagens|*.jpg; *.bmp; *.png";
ofd2.ShowDialog();
if (ofd2.FileName.ToString() != "")
{
nomeArquivo2 = ofd2.FileName.ToString();
picImagem2.Image = new Bitmap(nomeArquivo2);
}
}
4 – Evento Click do botão de comando “Comparar Imagens”
private void btnCompararImagens_Click(object sender, EventArgs e)
{
pgBar1.Visible = true;
btnLimpar.Enabled = true;
string img1_ref, img2_ref;
img1 = new Bitmap(nomeArquivo1);
img2 = new Bitmap(nomeArquivo2);
pgBar1.Maximum = img1.Width;
if (img1.Width == img2.Width && img1.Height == img2.Height)
{
for (int i = 0; i < img1.Width; i++)
{
for (int j = 0; j < img1.Height; j++)
{
img1_ref = img1.GetPixel(i, j).ToString();
img2_ref = img2.GetPixel(i, j).ToString();
if (img1_ref != img2_ref)
{
contador2++;
flag = false;
break;
}
contador1++;
}
pgBar1.Value++;
}
if (flag == false)
{
MessageBox.Show("As imagens não são as mesmas, " + contador2 + " pixels diferentes foram encontrados");
}
else
{
MessageBox.Show("As imagens são as mesmas, " + contador1 + " pixels iguais foram encontrados, e " + contador2 + " pixels incorretos foram encontrados");
}
}
else
{
MessageBox.Show("As imagens não podem ser comparadas");
}
}
5 – Evento Click dos botões “Encerrar” e “Limpar”
private void btnEncerrar_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btnLimpar_Click(object sender, EventArgs e)
{
picImagem1.Image = null;
picImagem2.Image = null;
pgBar1.Value = 0;
}
Executando o projeto teremos o seguinte resultado:

Eu não entrei em detalhes de otimização do código. Talvez exista uma forma mais rápida de fazer a comparação entre duas imagens. Fique à vontade para pesquisar e melhorar o código.
Pegue o projeto completo aqui: ComparaImagens.zip








