Bild in eine Grafik einfügen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von phil.

    Bild in eine Grafik einfügen

    Hallo, ich habe mal wieder eine Frage:

    Ich möchte ein Bitmap in eine Grafik zeichnen. Aber es kommt eine Fehlermeldung, die ich nicht verstehe.
    Erstmal der Code:

    VB.NET-Quellcode

    1. Graphics.FromImage(picture)
    2. Dim bit As New Bitmap(10, 10)
    3. graphic.DrawImageUnscaled(bit, 0, 0) '<---Fehler
    4. Graphics.FromImage(picture)
    5. Me.PictureBox1.Image = picture


    Und in der Fehlermeldung steht nur: ungültiger Parameter.

    Hoffentlich kann mir jemand helfen

    Viele Grüße
    Phil

    //EDIT:
    brauche ich eigentlich das zweite "Graphics.FromImage(picture)"?
    So zeichnet man in ein Image:

    VB.NET-Quellcode

    1. Dim ursprungbitamp As Bitmap = New Bitmap(Image.FromFile("C:\1.jpg"))
    2. Dim bit As Bitmap = New Bitmap(10, 10) 'neue leere bmp
    3. Dim g As Graphics = Graphics.FromImage(bit) 'neues graphics object das in "bit" zeichnen soll
    4. g.DrawImageUnscaled(ursprungbitamp, 0, 0) ' g zeichnet ursprungsbitmap unscalliert in die bitmap(bit)
    5. g.Dispose()
    6. Me.PictureBox1.Image = bit


    mfG

    Derfuhr
    Hallo,

    ich war mir nicht sicher, ob ich das noch in mein Problem von gestern reinschreiben sollte, da ich das ja als erledigt markiert hatte.

    also, es funktioniert, aber warum, was ist daran anders?

    noch eine Frage habe ich:
    warum muss man den Dispose-Befehl anwenden, wird da die Grafik vom Bild "gelöst"?

    Nochmals vielen Dank!
    Hallo Phil,

    phil schrieb:

    also, es funktioniert, aber warum, was ist daran anders?


    Anders als in deinem Code?

    VB.NET-Quellcode

    1. Dim bit As New Bitmap(10, 10)
    2. graphic.DrawImageUnscaled(bit, 0, 0)


    Wenn du "graphic" nicht als Graphics Object deklariert hast kann "graphic" auch nichts machen, da es nicht existiert. Desweiteren hast du versucht dasselbe(bit in bit) zu malen. Wenn du beide Codes vergleichst dann müsste es dir eigentlich auffallen.

    zu .Dispose():
    Wenn man .Dispose nicht verwenden würde, bleibt das was nicht disposed wurde im RAM. Beispiel: Du machst einen Bildschirmschoner mit hochaufgelösten Bildern(min.5MB), dann kannst dir ja vorstellen wie schnell der RAM sich nach und nach füllt und wenn er voll ist stürzt das Programm ab(Out of Memory Exception). Deshalb disposed man Graphics, Images etc. damit dies nicht passiert. Um das mal zu sehen, mach mal ein Projekt in dem im z.B. 3 sec. Takt Hochaufgelöste Bilder in eine Picturebox geladen werden und beobachte mal im Taskmanager wie der Speicher sich füllt.

    mfG

    Derfuhr

    PS: Ich empfehle dir dieses Buch zu lesen um die Grundlagen von VB zu lernen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Derfuhr“ ()

    Hallo,

    d.h.: ich habe das g=graphics.FromImage(picture) vergessen. - jetzt funktioniert es

    Und noch eine Frage zu dem Dispose:
    muss man dannach dem graphic wieder das Picture mit g=graphic.FromImage(picture) zuweisen?

    p.s.
    Ich habe mir bereits das gleiche Buch für 2008 runtergeladen, aber es macht irgendwie keinen Spaß, die Beispiele nachzuprogrammieren.
    Und, um einfach schnell mal was nachzuschauen, war es mir zu Umständlich.
    Ich hatte mir mal vorgenommen, das Buch durchzuarbeiten, was zur Folge hatte, dass ich ca.2 Monate kein Visual Basic Programmiert habe.
    ICh denke, das ist ein ganz gutes Buch, aber ich habe eine schlechte Erfahrung damit gemacht.
    Wie arbeitest denn du mit dem Buch?

    phil schrieb:

    Wie arbeitest denn du mit dem Buch?
    naja - ich würd mir vorstellen, es einfach zu lesen. von vorn bis hinten.
    Dabei, was mich langweilt, fröhlich überblättern, und wenn iwas kommt, wassich nich kenne, sobald ich glaube, verstanden zu haben, immer gleich ausprobieren, obs stimmt, wasser erzählt.

    Das stelle ich mir nicht soo langweilig vor, und es entstünde dabei keine 2 Monate Programmier-Pause.

    Gerne parallel zu einem eigenen Projekt, und immer, wenn im Buch was kommt, was man vlt. verwenden kann, gleich ins Projekt einfrickeln.

    So Themen wie Dispose kann man auch per Textsuche direkt ausfindig machen - hier würdest du vmtl aufs Kapitel "Resourcenbereinigung" stoßen, und das müsste an dem Punkt wo du grade stehst, doch hochinteressant sein.
    Und v.a.: Löffelmanns Erklärungen sind wesentlich fundierter als was du hier im Forum zum Thema aufschnappen kannst.
    Also nach dem Kapitel Resourcenbereinigung weißt du Bescheid (zB auch übers Using-Schlüsselwort).

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