基本信息
源码名称:图片比对程序(找出图片的不同之处)
源码大小:210.57M
文件格式:.zip
开发语言:ASP
更新时间:2019-07-28
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
根据像素点,进行图片的比对, 找出差异处,有灰度图与直方图


该项目主要包含以下文件:

 Form1.frm
 Form1.frx
 Form1.log
 Form2.frm
 Form3.frm
 Form4.frm
 Form5.frm
 frmAbout.frm
 frmAbout.frx
 frmSplash.frm
 frmSplash.frx
 MSCHRT20.oca*
 MSCHRT20.OCX*
 MSCHRT207w01.dll
 MSSCCPRJ.SCC
 Project1.vbp
 Project1.vbw

Private Type BITMAPFILEHEADER '14 bytes
        bfType As Integer
        bfSize As Long
        bfReserved1 As Integer
        bfReserved2 As Integer
        bfOffBits As Long
End Type

Private Type BITMAPINFOHEADER '40 bytes
        biSize As Long
        biWidth As Long
        biHeight As Long
        biPlanes As Integer
        biBitCount As Integer
        biCompression As Long
        biSizeImage As Long
        biXPelsPerMeter As Long
        biYPelsPerMeter As Long
        biClrUsed As Long
        biClrImportant As Long
End Type

Private Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
End Type

Private Type PALETTEENTRY
        peRed As Byte
        peGreen As Byte
        peBlue As Byte
        peFlags As Byte
End Type

Dim BF As BITMAPFILEHEADER
Dim BI As BITMAPINFOHEADER
Dim pixcolor() As Byte
Dim newcolor() As Integer
Dim light() As Integer
Dim color() As RGBQUAD
Dim num As Byte

Private Sub Form_Load()
        Form1.Hide
        frmAbout.Show
        frmAbout.SetFocus
End Sub

Private Sub txsr_Click()
On Error Resume Next
         Dim Counter As Integer
         ProgressBar1.Min = 0
         ProgressBar1.max = 10000
         ProgressBar1.Visible = True
         ProgressBar1.Value = ProgressBar1.Min
         For Counter = 0 To 10000
           ProgressBar1.Value = Counter
         Next Counter
         ProgressBar1.Visible = False
         ProgressBar1.Value = ProgressBar1.Min
         CommonDialog1.ShowOpen
         Picture1.Picture = LoadPicture(CommonDialog1.FileName)
         sb.Enabled = False
         yz.Enabled = False
         ezh.Enabled = False
         bytq.Enabled = False
         zft.Enabled = False
         jg.Enabled = False
End Sub

Private Sub drsj_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim i, j, n, t As Integer
        Form1.MousePointer = 11
        Form1.Enabled = False
        Open Form1.Picture1.Picture For Binary As #1
        Get #1, , BF
        Get #1, , BI
        ReDim pixcolor(BI.biHeight, BI.biWidth, 2) As Byte
        Select Case BI.biBitCount
               Case 1
               ReDim color(2) As RGBQUAD
               Get #1, , color(0)
               Get #1, , color(1)
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , num
                   pixcolor(i, j, 0) = color(num).rgbBlue
                   pixcolor(i, j, 1) = color(num).rgbGreen
                   pixcolor(i, j, 2) = color(num).rgbRed
                 Next j
               Next i
               
               Case 4
               ReDim color(16) As RGBQUAD
               For n = 0 To 15
               Get #1, , color(n)
               Next n
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , num
                   pixcolor(i, j, 0) = color(num).rgbBlue
                   pixcolor(i, j, 1) = color(num).rgbGreen
                   pixcolor(i, j, 2) = color(num).rgbRed
                 Next j
               Next i
               
               Case 8
               ReDim color(255) As RGBQUAD
               For n = 0 To 255
                 Get #1, , color(n)
               Next n
               If BI.biWidth Mod 4 = 0 Then
               n = 0
               Else
               n = BI.biWidth Mod 4
               End If
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , num
                   pixcolor(i, j, 0) = color(num).rgbBlue
                   pixcolor(i, j, 1) = color(num).rgbGreen
                   pixcolor(i, j, 2) = color(num).rgbRed
                 Next j
                 For t = 1 To n
                   Get #1, , num
                 Next t
               Next i
               
               Case 24
               If BI.biWidth Mod 4 = 0 Then
               n = 0
               Else
               n = BI.biWidth Mod 4
               End If
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , pixcolor(i, j, 0)
                   Get #1, , pixcolor(i, j, 1)
                   Get #1, , pixcolor(i, j, 2)
                 Next j
                 For t = 1 To n
                   Get #1, , num
                 Next t
               Next i
               End Select
               
        Close #1
        Form1.Enabled = True
        Form1.MousePointer = 0
        txsr.Enabled = True
        sb.Enabled = True
        yz.Enabled = True
        ezh.Enabled = True
        bytq.Enabled = True
        zft.Enabled = True
        jg.Enabled = True
        drsj.Enabled = True
End Sub

Private Sub zft_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim i, j, r, g, b As Integer
        Dim c, hd(255) As Long
        Dim cc, pic(255, 255, 2), l As Byte
        Dim PictureName As String
        MSChart1.ColumnCount = 32
        MSChart1.RowCount = 8
        Form1.MSChart1.Row = 1: Form1.MSChart1.RowLabel = "32"
        Form1.MSChart1.Row = 2: Form1.MSChart1.RowLabel = "64"
        Form1.MSChart1.Row = 3: Form1.MSChart1.RowLabel = "96"
        Form1.MSChart1.Row = 4: Form1.MSChart1.RowLabel = "128"
        Form1.MSChart1.Row = 5: Form1.MSChart1.RowLabel = "160"
        Form1.MSChart1.Row = 6: Form1.MSChart1.RowLabel = "192"
        Form1.MSChart1.Row = 7: Form1.MSChart1.RowLabel = "224"
        Form1.MSChart1.Row = 8: Form1.MSChart1.RowLabel = "256"
        Screen.MousePointer = 11
        For i = 0 To Picture1.ScaleWidth - 1
          For j = 0 To Picture1.ScaleHeight - 1
            c = Picture1.Point(i, j)
            r = (c And 255)
            g = (c And 65280) / 256
            b = (c And 16711680) / 65536
            cc = Fix((r   g   b) / 3)
            pic(i, j, 2) = cc
          Next
        Next
        For i = 0 To Picture1.ScaleWidth - 1
          For j = 0 To Picture1.ScaleHeight - 1
            l = pic(i, j, 2)
            hd(l) = hd(l)   1
          Next
        Next
        For i = 0 To 7
          For j = 0 To 31
            Form1.MSChart1.Row = i   1
            Form1.MSChart1.Column = j   1
            Form1.MSChart1.Data = hd(i * 32   j)
          Next
        Next
        Screen.MousePointer = 0
End Sub

Public Sub picpoint()
       Dim i, j, k As Integer
       Dim h(0 To 400, 0 To 400) As Integer              '存储像素的灰度值
       Dim r As Integer
       Dim c As Long
       Dim hd(0 To 300) As Integer
       Dim p(0 To 300) As Currency                       '灰度均值
       Dim tt(0 To 300) As Long                          '存储各等级像素个数
       Dim u As Long
       Dim uu(0 To 300) As Long
       Dim w(0 To 300) As Currency
       Dim b(0 To 300) As Long
       Dim max As Long
       Dim maxb As Integer
       Dim t As Integer
       MousePointer = 11
       '扫描全图,取得各像素灰度值
       For i = 1 To Picture1.ScaleWidth
         For j = 1 To Picture1.ScaleHeight
           c = Picture1.Point(i, j)
           r = (c And 255)
           h(i, j) = r
         Next
       Next
       '计算各等级像素个数
       For i = 1 To Picture1.ScaleWidth
         For j = 1 To Picture1.ScaleHeight
           For r = 0 To 255
             If h(i, j) = r Then
             tt(r) = tt(r)   1
             End If
           Next
         Next
       Next
       For t = 0 To 255
         p(t) = tt(t) / (Picture1.ScaleWidth * Picture1.ScaleHeight)       '计算灰度均值
       Next
       For t = 1 To 255
         u = u   (t - 1) * p(t)                          '计算灰度类均值和类直方图
       Next
       For k = 1 To 255
         uu(k) = uu(k - 1)   (k - 1) * p(k)              '计算类分离指标
         w(k) = w(k - 1)   p(k)
         If w(k) * (1 - w(k)) <> 0 Then
         b(k) = ((u * w(k) - uu(k)) * (u * w(k) - uu(k))) / (w(k) * (1 - w(k)))
         End If
       Next
       max = b(0)
       For k = 0 To 255                  '求最大Q时的k
         If b(k) >= max Then
         max = b(k)
         End If
       Next
       For k = 0 To 255
         If b(k) = max Then
         maxb = k
         End If
       Next
       Form2.Label2.Caption = maxb - 1           '输出k
End Sub

Private Sub yz_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        picpoint
        MousePointer = 0
        Form2.Show
End Sub

Private Sub bytq_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim i, j, rr As Integer
        Dim c, r, fx As Long
        Picture2.Cls
        Screen.MousePointer = 11
        For i = 0 To Picture1.ScaleWidth - 1 - 1
          For j = 0 To Picture1.ScaleHeight - 1 - 1
            c1 = Picture1.Point(i, j - 1)
            c2 = Picture1.Point(i - 1, j)
            c3 = Picture1.Point(i, j)
            c4 = Picture1.Point(i   1, j)
            c5 = Picture1.Point(i, j   1)
            c6 = Picture1.Point(i - 1, j - 1)
            c7 = Picture1.Point(i - 1, j   1)
            c8 = Picture1.Point(i   1, j - 1)
            c9 = Picture1.Point(i   1, j   1)
            r1 = (c1 And &HFF): r6 = (c6 And &HFF)
            r2 = (c2 And &HFF): r7 = (c7 And &HFF)
            r3 = (c3 And &HFF): r8 = (c8 And &HFF)
            r4 = (c4 And &HFF): r9 = (c9 And &HFF)
            r5 = (c5 And &HFF)
            fx = r6 - r2 - r4 - r9 - r1 - r8 - r7 - r5   8 * r3
            rr = Fix(Abs(fx / 2))
            Picture2.PSet (i, j), RGB(rr, rr, rr)
          Next j
        Next i
        Screen.MousePointer = 0
End Sub

Private Sub ezh_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim yu, i, j, r As Integer
        Dim c As Long
        yu = Form2.Label2.Caption
        Picture2.Cls
        For i = 0 To Picture1.ScaleWidth - 1
          For j = 0 To Picture1.ScaleHeight - 1
            c = Picture1.Point(i, j)
            r = (c And 255)
            If r > yu Then
            Picture2.PSet (i, j), RGB(255, 255, 255)
            Else
            Picture2.PSet (i, j), RGB(0, 0, 0)
            End If
          Next
        Next
End Sub

Private Sub sb_Click()
        Picture2.Cls
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Form3.Show
        Form3.SetFocus
        Form3.Label2.Caption = Form2.Label2.Caption - 128
End Sub

Private Sub jg_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        If Form3.Label2.Caption = 21 Then
        Form4.Show
        Form4.SetFocus
        Form4.Label3.Caption = "张燕"
        Else
          If Form3.Label2.Caption = 78 Then
          Form4.Show
          Form4.SetFocus
          Form4.Label3.Caption = "李晓红"
          Else
          Form4.Hide
          Form5.Show
          Form5.SetFocus
          End If
        End If
End Sub

Private Sub tc_Click()
        Form1.Hide
        frmSplash.Show
        frmSplash.SetFocus
End Sub