Bild neu speichern wird jedoch nicht erkannt

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von motion.

    Bild neu speichern wird jedoch nicht erkannt

    Hi leutz

    Ich bin auch ein newbi auf der suche nach einer Lösung:

    Problem:
    ich möchte ein bild via caputre screen neu speichern. soweit so gut
    jedoch wird dieses dann beim bildervergleich nicht angenommen resp. wird das alte, überschriebene bild zum vergleichen genommen.
    neue zusweisung funktioniert auch nicht.
    dispose funktioniert au nicht
    codes:

    VB.NET-Quellcode

    1. 'Compare
    2. Public Function AreSameImage(ByVal I1 As Image, ByVal I2 As Image) As Boolean
    3. Dim BM1 As Bitmap = I1
    4. Dim BM2 As Bitmap = I2
    5. For X = 0 To BM1.Width - 1
    6. For y = 0 To BM2.Height - 1
    7. If BM1.GetPixel(X, y) <> BM2.GetPixel(X, y) Then
    8. Return False
    9. End If
    10. Next
    11. Next
    12. Return True

    VB.NET-Quellcode

    1. 'neues bild
    2. Dim copy As System.Drawing.Image = Bitmap.FromFile("C:.....copy.PNG")
    3. ' festes bild
    4. Dim b0 As System.Drawing.Image = Bitmap.FromFile("C:.......PNG")
    5. Dim null As Boolean = AreSameImage(copy, b0)
    6. Dim screenshot As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
    7. Using g As Graphics = Graphics.FromImage(screenshot)
    8. g.CopyFromScreen(New Point(595, 599), New Point(0, 0), New Size(80, 36))
    9. End Using
    10. screenshot.Save("C:.......copy.PNG")
    11. copy.dispose()
    12. copy = Image.FromFile(".....copy.PNG")
    13. If null Then
    14. 'mach das
    15. Else : 'mach dies
    16. end if

    hier wird nur jedesmal das alte bild hervorgerufen und verglichen obwohl das bild erfolgreich ersetzt wurde ;(


    any ideas`?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „motion“ ()

    kann man das irgendwie umgehen? Also eine genutzte Datei auf ungenutzt setzen? Ist das überhaupt möglich?

    z.b nach save folgende Zuweisung

    VB.NET-Quellcode

    1. copy = Bitmap.FromFile("C:.....copy.PNG")


    oder

    VB.NET-Quellcode

    1. copy = New Bitmap("C:.....copy.PNG")

    eigentlich ne blöde frage, da ich es schon ausprobiert habe...

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „motion“ ()

    leider auch schon versucht

    mit

    VB.NET-Quellcode

    1. Kill("C:....copy.PNG")
    2. Using g As Graphics = Graphics.FromImage(screenshot)
    3. g.CopyFromScreen(New Point(595, 599), New Point(0, 0), New Size(80, 36))
    4. End Using
    5. screenshot.Save("C:...\copy.PNG")
    6. copy = New Bitmap("C:...\copy.PNG")
    7. copy.Dispose()

    trotzdem wird noch das gelöschte bild verglichen
    Nun Kill wird auch nicht funktionieren, da du keine Datei löschen kannst die noch in Benutzung ist.

    Du hast halt einen groben Denkfehler in deinem Code.
    Der richtige weg wäre:

    1. Dateien öffnen
    2. Vergleichen
    3. Dateien freigeben

    dein momentaner weg

    1. Dateien öffnen
    2. Vergleichen
    3. Screenshot machen
    4. Speichern
    5. Dateien freigeben

    merkst du den Unterschied?
    momentaner Ablauf ist:

    1. Datei öffnen
    2. Freigeben für den nächsten Screenshot

    VB.NET-Quellcode

    1. ' Variables Bild
    2. Dim copy As System.Drawing.Image = Bitmap.FromFile("C:....copy.PNG")
    3. 'Festes Bild
    4. Dim b0 As System.Drawing.Image = Bitmap.FromFile("C:....0.PNG")
    5. Dim null As Boolean = AreSameImage(copy, b0)
    6. copy.dispose()


    2. Datei löschen bevor
    3. Screenshot und Speichern
    4. Freigeben

    VB.NET-Quellcode

    1. Kill("C:......copy.PNG")
    2. Using g As Graphics = Graphics.FromImage(screenshot)
    3. g.CopyFromScreen(New Point(595, 599), New Point(0, 0), New Size(80, 36))
    4. End Using
    5. screenshot.Save("C:.....\copy.PNG")
    6. screenshot.Dispose()
    7. copy.Dispose()
    8. copy = Nothing


    5. Datei vergleichen


    VB.NET-Quellcode

    1. If null Then
    2. goto 'dort
    3. else
    4. goto ' da
    5. end if


    und es vergleicht das alte gelöschte/ überschriebene bild

    Edit:
    ok nochmals:

    1. Datei öffnen
    2. Freigeben
    3. alte Datei löschen
    4. Screenshot + speichern (Datei wird auch überschrieben)
    5. neue Zuweisung , vergleichen und befehl geh dorthin

    --Problem :cursing: ------> da nicht das neue Bild zum Vergleich übernommen wird.

    6. Freigeben
    7. Datei löschen
    8. Screenshot + speichern
    9. Vergleichen

    usw...

    :?: Frage:

    Wie kann man dieses Problem lösen? evtl. Refresh? Mit picturebox arbeiten?
    Kann nicht mit goto "Dim again" da weitere vergleiche gemacht werden müssen aufgrund der 1.2.3... Vergleichs-Resultate

    Brauche HIIILFE


    Hat sich erledigt.
    Habs mit einem workaround lösen können :)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „motion“ ()