|Title||Compare two images to find differences|
|Description||This example shows how to compare two images to find differences in Visual Basic 6.|
|Keywords||image, bitmap, compare, difference, imagediff|
When you select two images to compare and click the Go button, the program executes the following code. It loads the two image files into hidden PictureBoxes. It finds the smaller of the images' widths and heights, and gives the result PictureBox that size.
Next the program loops over the pixels in the smaller area, comparing the the images' pixels. If two corresponding pixels are equal, the program colors the result pixel white. If the two pixels are unequal, the program makes the result pixel red. When it has examined all of the pixels, the program displays the result image.
The result image highlights differences between the two input images no matter how small the differences are. If a pixel in one image has RGB values 50, 150, 200 and the corresponding pixel in the other image has RGB values 51, 150, 200, the result shows the difference plainly even though you won't be able to tell the difference with your eyes.
Private Sub cmdGo_Click()
Dim wid As Integer
Dim hgt As Integer
Dim are_identical As Boolean
Dim x As Integer
Dim y As Integer
Screen.MousePointer = vbHourglass
' Load the images.
pic1.Picture = LoadPicture(txtFile1.Text)
pic2.Picture = LoadPicture(txtFile2.Text)
' Size the difference image.
wid = Min(pic1.ScaleWidth, pic2.ScaleWidth)
hgt = Min(pic1.ScaleHeight, pic2.ScaleHeight)
picResult.Width = wid + (picResult.Width - _
picResult.Height = wid + (picResult.Height - _
' Create the difference image.
are_identical = True
For x = 0 To wid - 1
For y = 0 To hgt - 1
If pic1.Point(x, y) = pic2.Point(x, y) Then
picResult.PSet (x, y), vbWhite
picResult.PSet (x, y), vbRed
are_identical = False
If (pic1.ScaleWidth <> pic2.ScaleWidth) Or _
(pic1.ScaleHeight <> pic2.ScaleHeight) Then _
are_identical = False
If are_identical Then
MsgBox "The images are identical"
MsgBox "The images are different"
Screen.MousePointer = vbDefault
For more information on graphics programming in Visual Basic 6, see my acclaimed book Ready-to-Run Visual Basic Graphics Programming.