Fehler bei Dim ... As New Bitmap !?

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von PlatinSecurity.

    Fehler bei Dim ... As New Bitmap !?

    Moin,

    ich brauche hilfe bei folgendem Fehler:
    "
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Hinweise zur Fehlerbehebung:
    Erstellen Sie eine Objektinstanz mit dem Schlüsselwort "new".
    "

    Ich erstelle gerade ein "Bild Filter".
    Habe nun eine Function die so hier aussieht:

    VB.NET-Quellcode

    1. 'Convert Gray
    2. Public Function gray(ByVal image As Bitmap) As Bitmap
    3. Dim a As New Bitmap(image.Height, image.Width)
    4. Dim b As Graphics = Graphics.FromImage(a)
    5. Dim c As New ColorMatrix(New Single()() {
    6. New Single() {0.3F, 0.3F, 0.3F, 0, 0},
    7. New Single() {0.59F, 0.59F, 0.59F, 0, 0},
    8. New Single() {0.11F, 0.11F, 0.11F, 0, 0},
    9. New Single() {0, 0, 0, 1, 0},
    10. New Single() {0, 0, 0, 0, 1}})
    11. Dim d As New ImageAttributes()
    12. d.SetColorMatrix(c)
    13. b.DrawImage(image, New Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, d)
    14. b.Dispose()
    15. Return a
    16. End Function


    Aufgerufen wird diese dann mit

    VB.NET-Quellcode

    1. negative_1.Image = gray(bild.Image)


    Warum aber kommt eben dieser eine Fehler den ich oben schon genannt habe ?
    Ich mein, ich habe ja "new" oder eben "New" dort stehen 8| ?(

    Danke im vorraus <3

    EDIT: Habe folgende Imports

    VB.NET-Quellcode

    1. Imports System, System.Collections.Generic, System.ComponentModel, System.Data, System.Drawing, System.Drawing.Imaging, System.Linq, System.Text, System.Windows.Forms, AForge, AForge.Imaging, AForge.Imaging.ComplexFilters, AForge.Imaging.ColorReduction, AForge.Imaging.Filters

    Evtl. hast du den Filter in einer separaten Klasse welche nicht instanziiert wurde?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Wie genau meinst du das wenn ich fragen darf ?

    Ich habe normalerweise brav alles eingebunden.
    Habe in meinen Verweisen aktuell:
    - AForge.dll - Datei
    - AForge.Imaging.dll - Datei
    - TouchlessLib - .NET
    - WebCamLib.dll - Datei

    Und alle sollten richtig sein. Hab sie von anfangan eingebunden bevor ich los gelegt habe.

    Und was ich noch sagen sollte ist, dass ich unter
    Projekt -> Eigentschaften -> Kompilieren -> Erweiterte Kompilierungsoprionen... -> Zielframework (.NET Framework 3.5)
    eingestellt da dies wichtig ist für die WebCamLib und TouchlessLib
    Steht die Funktion "gray" in der gleichen Klasse, in der du sie mit "negative_1.Image = gray(bild.Image)" aufrufst?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ach so... Ja steht sie.

    EDIT:
    Habe jetzt die Function weg gelassen und es so hier gemacht

    VB.NET-Quellcode

    1. bild.Image = Touchless.CurrentCamera.GetCurrentImage
    2. Dim gray As New Bitmap(bild.Image)
    3. Dim a1, b1 As Integer
    4. Dim c1, d1, f1, g1 As Integer
    5. For a1 = 0 To gray.Width - 1
    6. For b1 = 0 To gray.Height - 1
    7. c1 = gray.GetPixel(a1, b1).R
    8. d1 = gray.GetPixel(a1, b1).G
    9. f1 = gray.GetPixel(a1, b1).B
    10. g1 = CInt((c1 + d1 + f1) / 3)
    11. gray.SetPixel(a1, b1, Color.FromArgb(g1, g1, g1))
    12. Next
    13. Next
    14. Dim negative As New Bitmap(bild.Image)
    15. Dim a2, b2 As Integer
    16. Dim c2, d2, f2, g2 As Integer
    17. For a2 = 0 To negative.Width - 1
    18. For b2 = 0 To negative.Height - 1
    19. c2 = negative.GetPixel(a2, b2).R
    20. d2 = negative.GetPixel(a2, b2).G
    21. f2 = negative.GetPixel(a2, b2).B
    22. g2 = CInt((c2 + d2 + f2) / 3)
    23. If g2 < 128 Then
    24. negative.SetPixel(a2, b2, Color.FromArgb(0, 0, 0))
    25. Else
    26. negative.SetPixel(a2, b2, Color.FromArgb(255, 255, 255))
    27. End If
    28. Next
    29. Next
    30. Dim ultra As New Bitmap(bild.Image)
    31. Dim a3, b3 As Integer
    32. Dim c3, d3, f3 As Integer
    33. For a3 = 0 To ultra.Width - 1
    34. For b3 = 0 To ultra.Height - 1
    35. c3 = ultra.GetPixel(a3, b3).R
    36. d3 = ultra.GetPixel(a3, b3).G
    37. f3 = ultra.GetPixel(a3, b3).B
    38. ultra.SetPixel(a3, b3, Color.FromArgb(255 - c3, 255 - d3, 255 - f3))
    39. Next
    40. Next
    41. negative_1.Image = gray
    42. negative_2.Image = negative
    43. negative_3.Image = ultra


    Doch der Fehler kommt immer noch.

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

    @PlatinSecurity Dieser Code ist so, wie er da steht, in Ordnung, bei mir knallt nix. Dim d As New ImageAttributes() kannst Du noch disposen.
    In welcher Zeile genau kommt denn nun der Fehler?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:


    In welcher Zeile genau kommt denn nun der Fehler?


    Ich weis nicht ob du mein Edit mitbekommen hast und dich auf diesen Code beziehst.
    Aber ich Antworte mal eben auf deine Frage...

    Er knallt bei mir immer wegen dem ersten "new" weil da angeblich was fehlt.

    VB.NET-Quellcode

    1. Dim gray As New Bitmap(bild.Image)


    Und wie oben beschrieben kommt dieser Fehler

    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Hinweise zur Fehlerbehebung:
    Erstellen Sie eine Objektinstanz mit dem Schlüsselwort "new".
    @PlatinSecurity Setz mal auf diese Zeile einen Haltepunkt und sieh Dir an, was in bild.Image steht.
    Möglicherweise ist da gar kein Bild drin (z.B. weil Du das BackgroundImage gesetzt hast).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:


    Möglicherweise ist da gar kein Bild drin (z.B. weil Du das BackgroundImage gesetzt hast).


    Also doch doch... ein Bild ist drin.

    Wenn die Form geladen wird, wird erst ein hinterlegtes Bild (avatar.png) in Resources in die "bild.Image" geladen.
    Ab da sollte ja schon wenn ich dann "Start" für meine Kamera drücke das gehen.
    Ohne den ganzen Filter mist und NUR die Kamera mit Picture Funktion geht es auch.

    Also er nimmt meine Kamera nach dem Start-Klick und Filmt bis ich Picture-Klicke und setzt in bild_gemacht.Image das AKTUELLE zu
    dem Zeitpunkt gedrückte Bild von der Kamera da hin...

    Omg... hoffentlich versteht man was ich mein :'D

    EDIT (WICHTIG):
    Haha... Ich habs... Da ich den mist komplett in einem Timer hatte, wollte er ein Live bild nicht als Bild ansehen.
    Ich musste es nun so machen das wenn ich ein Bild gemacht habe, dass dann erst die 3 Negativ Bilder erstellt werden.
    Hmm....

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

    PlatinSecurity schrieb:

    Also doch doch... ein Bild ist drin.
    Dann füge vor dieser Zeile mal zum Test diese Zeile ein:

    VB.NET-Quellcode

    1. bild.Image.Save("c:\Temp\Test.png")
    Was passiert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Passiert folgendes... Programm startet nicht, sondern schließt sofort wieder.

    Aber wie oben erwähnt geht es mit der Button klick methode :'D
    Nur problem wollte ich es gerne als Live Bild haben, da ich ja auch Live von der Webcam aufnehme.

    Unnötiges Vollzitat entfernt.
    - Solaris

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

    @PlatinSecurity OK. Sag ich doch. :D
    Dann fügst Du jetzt folgende Zeile da ein:

    VB.NET-Quellcode

    1. bild.Image = New Bitmap(PFAD_ZU_EINEM_EXISTIERENDEN_BILD)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jo. Alles kla.

    Jetzt muss ich nur noch schauen wie ich meine anderen sachen hin bekommen und dann fertig :'D

    Melde mich wenn es noch mal notwendig ist da ich vilt. nix auf Google gefungen hab per neuen Tread ;)