Micro Focus QTP (UFT) Forums
Bitmap Comparison Algorithm by creating Custom comparer - Printable Version

+- Micro Focus QTP (UFT) Forums (https://www.learnqtp.com/forums)
+-- Forum: Micro Focus UFT (earlier known as QTP) (https://www.learnqtp.com/forums/Forum-Micro-Focus-UFT-earlier-known-as-QTP)
+--- Forum: UFT / QTP Beginners (https://www.learnqtp.com/forums/Forum-UFT-QTP-Beginners)
+--- Thread: Bitmap Comparison Algorithm by creating Custom comparer (/Thread-Bitmap-Comparison-Algorithm-by-creating-Custom-comparer)



Bitmap Comparison Algorithm by creating Custom comparer - remya - 01-18-2011

Hi,

Could anyone pls help to develop advanced alogorithm for fixing bitmap issues

It's Very urgent

Thanks in Advance

Remya


RE: Bitmap Comparison Algorithm by creating Custom comparer - john - 01-19-2011

Hi remya,
Please try this code and let me know the result.

Compare Two Images - the Visual Basic Source Code
Requires Victor Image Processing Library for 32-bit Windows v 5 or higher.

' Data type definitions ...............................................
Code:
' Image descriptor
Type imgdes
   ibuff As Long
   stx As Long
   sty As Long
   endx As Long
   endy As Long
   buffwidth As Long
   palette As Long
   colors As Long
   imgtype As Long
   bmh As Long
   hBitmap As Long
End Type

Type JpegData
    ftype As Long
    width As Long
    length As Long
    comps As Long
    precision As Long
    sampfac0 As Long
    sampfac1 As Long
    sampfac2 As Long
    sampfac3 As Long
    vbitcount As Long
End Type


' Function Declarations ...........................................
Code:
Declare Function allocimage Lib "VIC32.DLL" (image As imgdes, ByVal wid As Long, ByVal leng As Long, ByVal BPPixel As Long) As Long
Declare Sub freeimage Lib "VIC32.DLL" (image As imgdes)
Declare Function jpeginfo Lib "VIC32.DLL" (ByVal filename As String, jdat As JpegData) As Long
Declare Function loadjpg Lib "VIC32.DLL" (ByVal filename As String, resimg As imgdes) As Long
Declare Function pixelcount Lib "VIC32.DLL" (ByVal min As Long, ByVal max As Long, redct As Long, grnct As Long, bluct As Long, srcimg As imgdes) As Long
Declare Function savejpg Lib "VIC32.DLL" (ByVal filename As String, srcimg As imgdes, ByVal quality As Long) As Long


' The Subroutine ..................................................
Code:
Private Sub mnucompare2pics_Click()
   Dim refimage As imgdes
   Dim testimage As imgdes
   Dim finalimage As imgdes
   Dim ref_fname As String
   Dim test_fname As String
   Dim final_fname As String
   Dim ref_fileinfo As JpegData
   Dim test_fileinfo As JpegData
   Dim rcode1 As Long
   Dim rcode2 As Long
   Dim vbitcount As Long
   Dim ared As Long
   Dim agrn As Long
   Dim ablu As Long
  
  
   ref_fname = "refc.jpg"
   test_fname = "testc.jpg"
   final_fname = "finalc.jpg"
      
    rcode1 = jpeginfo(ref_fname, ref_fileinfo)    
    rcode2 = jpeginfo(test_fname, test_fileinfo)  
    
    If ((rcode1 = NO_ERROR) And (rcode2 = NO_ERROR)) Then
    
        rcode1 = allocimage(refimage, ref_fileinfo.width, ref_fileinfo.length, ref_fileinfo.vbitcount)
        rcode2 = allocimage(testimage, test_fileinfo.width, test_fileinfo.length, test_fileinfo.vbitcount)
    
        If ((rcode1 = NO_ERROR) And (rcode2 = NO_ERROR)) Then
        
            rcode1 = loadjpg(ref_fname, refimage)    ' Load the reference image
            rcode2 = loadjpg(test_fname, testimage)  ' Load the test image      
            
            If ((rcode1 = NO_ERROR) And (rcode2 = NO_ERROR)) Then
                ' Allocate space to hold the final image      
                rcode1 = allocimage(finalimage, test_fileinfo.width, test_fileinfo.length, test_fileinfo.vbitcount)
                If (rcode1 = NO_ERROR) Then
                    ' Compare the images      
                    rcode1 = xorimage(refimage, testimage, finalimage)        ' Turns all identical pixels to zero in the final image
                    rcode2 = pixelcount(1, 255, ared, agrn, ablu, finalimage) ' Count the pixels that are nonzero      
                    If (rcode1 = NO_ERROR) And (rcode2 = NO_ERROR) And (ared > 0 Or agrn > 0 Or ablu > 0) Then
            
                        MsgBox ("pictures are different, do something")
                    End If
                
                End If
           End If
          
        End If
            
        ' Save the final image      
        rcode1 = savejpg(final_fname, finalimage, 75)

        ' Free the image buffers    
        freeimage finalimage  
        freeimage testimage
        freeimage refimage
    End If

End Sub