Hallo Rainer,
Bild114 lade ich in Picture1 und das wird auch als erstes in
Picture2 geladen.
Die Bilder der beiden Pictureboxen müssen dann zwangsläufig
gleich sein, es wird ja die selbe Vorlage geladen.
theoretisch müssen, mein Code sagt klar, wenn er zwei identische Bilder vergleicht, sie wären nicht gleich ((
Ich habe im nachstehenden Code auch bild114 mit bild114 verglichen, Ergebnis= ungleich.
Dann läuft mein Programm und stellt fest, daß Bild114 =
Bild114 ist aber ungleich Bild134. … Funktioniert, ist jetzt
getestet.
Wenn bei Dir für zwei Zeichen mit Rechtecken keine Gleichheit
festgestellt wird, sind die Bilder nicht pixelgenau gleich.
Dann funktioniert das Verfahren so nicht.
Das wäre eine Hiobsbotschaft für mich:frowning: Dann wäre das ganze Vorhaben ja wieder mal am Ende.
Noch hoffe ich darauf, daß ich bei der Umsetzung deines Codes einen Fehler machte. Kann ja wohl nicht sein daß Picture1 und Picture2 das gleiche Bild (im Code bild114.bmp) reingeladen bekommen und mein Code sagt die wären ungleich.
Gib doch mal noch zwei - drei andere Bilder von nicht
druckbaren Zeichen. Dann kann ich hier sehen, ob die erkannt
werden.
Das bringt m.E. jetzt noch nix. Denn mein Code spinnt ja schon rum wenn er bild114 mit bild114 vergleicht.
Außerdem mag ich keine schlechten Nacjrichten Wenn du mir dann sagst, diese Mistquadrate werden auch noch unterschiedlich in Bytes abgebildet wäre das auch niederschmetternd.
So, ich befreie mal jetzt den Ordner von allem was kein bmp ist und teste mal komplett deinen Code.
Irgendwie MUß ich doch rauskriegen können warum dein Code klappt und meiner nicht.
(Oder du *lächel*)
Gruß
Reinhard
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim PicBits1() As Byte, PicInfo As BITMAP
Dim PicBits2() As Byte
Dim Txt1 As String, Txt2 As String
Dim Cnt As Long, BytesPerLine As Long
Private Sub Form\_Load()
Picture1.Picture = LoadPicture("c:\test\zeichenbilder\bild **114**.bmp")
End Sub
Private Sub Command1\_Click()
Dim B As Long, Na As String, ff As Integer, NP
Dim Z, Ungleich As Boolean
Const Pfd As String = "C:\test\zeichenbilder\"
GetObject Picture1.Image, Len(PicInfo), PicInfo
BytesPerLine = (PicInfo.bmWidth \* 3 + 3) And &HFFFFFFFC
ReDim PicBits1(1 To BytesPerLine \* PicInfo.bmHeight \* 3) As Byte
GetBitmapBits Picture1.Image, UBound(PicBits1), PicBits1(1)
Txt1 = Space((UBound(PicBits1) + 1) \ 2)
CopyMemory ByVal StrPtr(Txt1), PicBits1(1), UBound(PicBits1)
ff = FreeFile
Open Pfd & "Protokoll.txt" For Output As #ff
For B = **114 To 114**
Na = Pfd & "Bild" & B & ".bmp"
Picture2.Picture = LoadPicture(Na)
GetObject Picture2.Image, Len(PicInfo), PicInfo
BytesPerLine = (PicInfo.bmWidth \* 3 + 3) And &HFFFFFFFC
ReDim PicBits2(1 To BytesPerLine \* PicInfo.bmHeight \* 3) As Byte
GetBitmapBits Picture2.Image, UBound(PicBits2), PicBits2(1)
Txt2 = Space((UBound(PicBits2) + 1) \ 2)
CopyMemory ByVal StrPtr(Txt2), PicBits2(1), UBound(PicBits2)
If Txt1 = Txt2 Then
Print #ff, Format(B, "00000") & " Ja" & " "
Else
Print #ff, Format(B, "00000") & " Nein" & " "
End If
Print #ff, Txt2 & vbCr
Picture2.Picture = LoadPicture()
Next B
Close #ff
NP = Shell("notepad " & Pfd & "Protokoll.txt", vbMaximizedFocus)
End Sub