Image-Object prüfen ob es <> dem Clipboard.GetImage ist

  • VB.NET

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

    Image-Object prüfen ob es <> dem Clipboard.GetImage ist

    Hallo zusammen.
    habe mir mal die VS 2010 Express Version gesaugt und wollt eigentlich nur ein wenig testen.
    Nun beschäftige ich mich gerade mit dem Clipboard (der Zwischenablage)

    Ich möchte im Grunde Inhalte aus dem Clipboard in mehrere (je nach Typ) Arrays schreiben.

    Ein Problem habe ich beim Image-Typ.
    Wie prüfe ich am besten ob sich das Image Object im Clipboard von dem dass ich zuletzt abgerufen habe unterscheidet?

    Mein bisheriger Quelltext (alle 500ms durch einen Timer aufgerufen [geht das evtl. auch eleganter?]) sieht so aus:

    VB.NET-Quellcode

    1. Private Sub CheckClipboard(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrTick.Tick
    2. If (Clipboard.ContainsText) Then
    3. If ((curText <> Clipboard.GetText)) Then
    4. ReDim Preserve txtArr(txtArr.Count)
    5. ReDim Preserve typeArr(typeArr.Count)
    6. txtArr(txtArr.Count - 2) = Clipboard.GetText
    7. typeArr(typeArr.Count - 2) = "Text"
    8. If (Clipboard.GetText.ToString.Length > 15) Then
    9. listContent.Items.Add("Text - " & Clipboard.GetText.ToString.Substring(0, 14))
    10. Else
    11. listContent.Items.Add("Text - " & Clipboard.GetText)
    12. End If
    13. curText = Clipboard.GetText
    14. End If
    15. ElseIf (Clipboard.ContainsImage) Then
    16. If Not (curImg Is Nothing) Then
    17. If Not (curImg Is Clipboard.GetImage) Then
    18. ReDim Preserve imgArr(imgArr.Count)
    19. ReDim Preserve typeArr(typeArr.Count)
    20. imgArr(imgArr.Count - 2) = Clipboard.GetImage
    21. typeArr(typeArr.Count - 2) = "Image"
    22. listContent.Items.Add("Image - " & Clipboard.GetImage.Tag)
    23. curImg = Clipboard.GetImage.Clone
    24. End If
    25. Else
    26. ReDim Preserve imgArr(imgArr.Count)
    27. ReDim Preserve typeArr(typeArr.Count)
    28. imgArr(imgArr.Count - 2) = Clipboard.GetImage
    29. typeArr(typeArr.Count - 2) = "Image"
    30. listContent.Items.Add("Image - " & Clipboard.GetImage.Tag)
    31. curImg = Clipboard.GetImage
    32. End If
    33. End If
    34. End Sub


    Dass ich besser abfragen könnte welcher Typ sich in der Zwischenablage befindet ist mir bewusst, ist hier aber erstmal vollkommen egal.
    Der farbig hervorgehobene Quelltext ist mein Sorgenkind.

    Bisherige Versuche waren:

    • über .GetHashCode zu vergleichen
    • über einen md5 checksum vergleichen...doch leider erfordert md5.create ein Byte-Array und ich weiß nicht wie ich dieses aus einem Image erzeuge
    • über Breite und Höhe vergleichen (was natürlich total dämlich wäre)
    • über .Pallette vergleichen (auch dies bringts nicht wirklich)
    Wäre über ein wenig Hilfe sehr erfreut :)
    Wünsche zudem einen guten Start ins Wochenende :thumbsup:

    VB.NET-Quellcode

    1. Dim ms As New IO.MemoryStream()
    2. Image.Save(ms,Imaging.ImageFormat.DASFORMAT)
    3. Dim bytes() As Byte = ms.ToArray()
    4. 'und schon hast du deine Bytes...(du könntest den Hash Code auch aus den Farbwerten generieren -> LockBits)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Bin mir recht sicher dass ich es so ausprobiert habe...und...wie gesagt...es scheint als würde sich das Image im Clipboard dauerhaft ändern...daher kann ich hier nicht mit GetHash oder Equals arbeiten :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BlaXun“ ()