Bild aus Picturebox entfernen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Ghars.

    Bild aus Picturebox entfernen

    Hey,
    ich möchte überprüfen, ob in einer picturebox ein Bild ist oder ob sie leer ist.
    "Das kann ja nicht so schwer sein", hab ich mir gedacht.
    Tja, jz geht es nicht weiter. Ich habs einfach mit

    VB.NET-Quellcode

    1. If picturebox1.image = nothing then
    2. 'lala
    3. End If


    versucht, aber das geht irgendwie nicht.
    Schon ne halbe Stunde gegoogelt aber nix brauchbares gefunden...
    Wär nett wenn ihr mir helfen könntet, denn irgendwie kommt mir das wieder komisch vor...
    Versuch ma:

    VB.NET-Quellcode

    1. If Picturebox1.Image Is nothing Then
    2. 'lalala

    Dein
    If picturebox1.image = nothing then

    ist eine Zuweisung von Nothing auf das Image. Das löst in einer If-Anweisung eigentlich eine Fehlermeldung aus, weil hier ein boolscher Ausdruck erwartet wird. :rolleyes:
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Nein wir sind unter VB da ist das keine Zuweisung, ansonsten könnte man ja niemals etwas verbleichen weils jedesmal eine Zuweisung wäre

    VB.NET-Quellcode

    1. Dim a As String = "a"
    2. Dim b As String = "b"
    3. If a = b Then


    würde ja deiner Meinung nach b nach a zuordnen so das in der Variablen a nun "b" stehen würde, das aber in Sprachen wie C, PHP und Java der fall, dort wird der doppel Operator (==) verwendet zum vergleichen.

    Dodo schrieb:

    Nein wir sind unter VB da ist das keine Zuweisung, ansonsten könnte man ja niemals etwas verbleichen weils jedesmal eine Zuweisung wäre

    @Dodo, mag sein. aber bei mir schmeißt das bei If Picturebox.Image=Nothing Then... nen Fehler aus. :thumbdown:
    "Fehler 1 Der =-Operator ist für die Typen "System.Drawing.Image" und "System.Drawing.Image" nicht definiert. ..."
    Während:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. If PictureBox1.Image Is Nothing Then
    3. MsgBox("Nothing")
    4. Else
    5. MsgBox("nix Nothing")
    6. End If
    7. End Sub

    tadellos funzt. :D
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Ja das auch richtig, weil man nicht 2 bilder so vergleichen kann, deswegen gibt es den = Operator dort nicht, das liegt aber nicht am Nothing

    VB.NET-Quellcode

    1. If Picturebox1.Image = Pictruebox2.Image Then


    würde ebenso wenig funktionieren.
    Danke, das mit dem "Is Nothing" hat geklappt.
    Jz hab ich aber schon wieder ein Problem, wenn ich gucken will ob in der PB ein Bild aus den Resourcen ist...

    VB.NET-Quellcode

    1. If PictureBox1.Image = My.Resources.Test Then
    2. 'lala
    3. End If


    Das geht nicht und auch mit "Is" statt "=" geht es nicht, weil das eine ein image und das andere ein bitmap ist.
    Nur wie kann ich dann überprüfen welches bild in der PB angezeigt wird?
    Du könntest das auch so nicht prüfen, weil wie gesagt Images lassen sich nicht so einfach mit dem "=" Operator vergleichen.

    Wenn im Netz suchst findest genügend Quellen wo es Bild vergleichungs Codes gibt, wie z.B. das hier vbarchiv.net/tipps/tipp_1514-vergleich-von-bildern.html

    Ansonsten gibt es beim Image glaube sowas wie eine Hash Funktion, heißt man müsste nur die beiden Hashes vergleichen um zu erkennen ob das Bild identisch ist. Man bedenke würde nur ein Pixel anders sein würde der Hash schon nimmer stimmen.
    Also, ich hab ma was ganz blödes probiert: 8o

    VB.NET-Quellcode

    1. Sub ImageVergleich(ByVal bmp1 As Image, ByVal bmp2 As Image)
    2. Debug.Print("Bilder gleich? : " & bmp1.Equals(bmp2))
    3. End Sub

    Übergibt man der Sub 2 Bilder mit gleicher Objektreferenz, gibt die Sub true aus.
    Ich habe also vorher einer Picturebox 1 Hintergrundbild verpaßt und dann das Hintergrundbild und das Quellbild übergeben...= true.
    Vergleiche mit anderen Bildern oder das zerstören der Referenz mit bmp2=new bitmap(20,20) ergab false.
    Zu meiner Schande :whistling: muß ich aber gestehen, dass ich dies Equals-Sache jetz nur ma so aus blödem Dunst probiert habe. Die genaue Funktion muß ich mir da mal noch genauer anschauen. Aber vielleicht reicht das ja trotzdem für deinen Anwendungsfall, oder jemand kann uns mal nen Tip zu Equals geben. :D
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Das Problem ist, dass das Bild in den Resourcen Bitmap ist und das aus der PB Image. Bitmap Und Image kann man also nicht vergleichen; nicht mit =, Is, equals, etc...
    Bei dem Hash bin ich net sicher ob es geht, weil ich die Bilder in der PB auf dir passende Größe gestreckt habe. (Der Link is für VB6. Ich hasse VB6... Aber trotzdem danke, werd ich mir auch anschauen und verscuhen in vb.net zu übertragen :D)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Image1 As Image = My.Resources.Blaue_Berge
    3. Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
    4. If (PictureBox1.Image Is Image1) Then
    5. PictureBox1.Image = My.Resources.Sonnenuntergang
    6. Else
    7. PictureBox1.Image = Image1
    8. End If
    9. End Sub
    10. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    11. PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize'optional
    12. PictureBox1.Image = Image1
    13. End Sub
    14. End Class


    habe ich schonmal iwo gepostet, so kannst du bilder aus den ressourcen 'vergleichen', bzw prüfen, ob in der pb das bild aus deiner ressource ist. Schaus dir mal an.

    gruss mono
    Das ist meine Signatur und sie wird wunderbar sein!