Text auf Bild schreiben - Immer das selbe Problem!! Bitte um Hilfe...

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Text auf Bild schreiben - Immer das selbe Problem!! Bitte um Hilfe...

    VB.NET-Quellcode

    1. Dim bmp As New Bitmap(My.Resources.Kunststoff.Width, My.Resources.Kunststoff.Height)
    2. Dim g As Graphics = Graphics.FromImage(bmp)
    3. g.DrawImage(My.Resources.Kunststoff, New Point(0, 0)) g.DrawString("Mein Text...", New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 10, 10)
    4. g.Dispose()
    5. PictureBox1.BackgroundImage = bmp


    Hallo Zusammen,
    wie oben angegeben versuche ich mit dem Code einen Text auf ein Bild zu schreiben. Leider hat die Sache einen Haken!! Der Text wird zwar wunderbar übertragen,
    nur leider läuft mein Arbeitsspeicher voll!! Mit jedem Zeichenvorgang steigt die Arbeitsspeicheranzeige im Task Manager. Da ich beabsichtige einen Fließtext auf ein Bild zu schreiben und somit sehr häufig auf das Bild gezeichnet wird, ist der Speicher in kürzester Zeit voll gelaufen!!

    Ich bitte dringend um Abhilfe! Ich möchte Text auf ein Bild (ca. 8mb groß) zeichnen und in eine Picturebox übertragen ohne das der Speicher zuläuft!!

    Danke
    Machma aus

    VB.NET-Quellcode

    1. Dim bmp As New Bitmap(My.Resources.Kunststoff.Width, My.Resources.Kunststoff.Height)
    diesen hier:

    VB.NET-Quellcode

    1. Using bmp As New Bitmap(My.Resources.Kunststoff.Width, My.Resources.Kunststoff.Height)
    2. ' Dein Code
    3. End Using
    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!
    für jeden Zeichenvorgang immer eine neue Bitmap von 8MB herzunehmen ist bisserl pervers.
    Nimm lieber immer dieselbe Bitmap, und zeichne deinen Text darüber.
    Also nicht in die Bitmap zeichnen, sondern in die Graphics, die dir im Paint-Event geliefert werden. Dann brauchst du die Bitmap nichtmal anzufassen, sondern kannst sie einmalig als BackgroundImage setzen, und das Zeichnen ist davon ja ganz unberührt.

    DrVisualBasic schrieb:

    GEMA Sperre umgehen?
    Hältst du das für legal? Sowas wird hier im Forum nicht erlaubt sein. Bitte entferne das aus deiner Signatur.

    zum Thema:
    Instanziere dein Bild einmalig außerhalb der Sub und somit global. Zeichne dann deinen Text nicht aufs Bild sondern im Paint-Event der PicBox "über" das Bild. Erst wenn du das Bild speichern möchtest, zeichnest du zuvor einmalig direkt auf die Bitmap.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    DrVisualBasic schrieb:

    Und wie mache ich das?
    Und das Bild als BackgroundImage im Designer festlegen

    VB.NET-Quellcode

    1. Private Sub PictureBox1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    2. e.Graphics.DrawString("Mein Text...", New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 10, 10)
    3. End Sub
    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!

    noBlubb schrieb:

    Paint jedesmal, wenn dein Fenster aktualisiert wird...
    bzw. wenn man ihm über

    VB.NET-Quellcode

    1. Invalidate(...)
    2. ' und
    3. Update()
    sagt, dass es aktualisiert werden soll.
    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!
    Leider klappt es immer noch nicht. Mit dem Form Load wird der Text aus der Textbox auf das Bild geschrieben, doch beim Klick auf den Button ist keine Änderung festzustellen :/
    Was mache ich falsch?
    Bilder
    • yh.PNG

      17,89 kB, 1.004×210, 209 mal angesehen

    DrVisualBasic schrieb:

    Mit dem Form Load wird der Text aus der Textbox auf das Bild geschrieben,
    Nö, im Picturebox-Click-Event lässt du die Picbox neu zeichnen. Und die holt sich dazu den Text aus der Textbox. Wenn da was drinsteht, in der Textbox, sollte das auch auf die Picbox gezeichnet werden.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Wenn Du immer, bevor Du ein neues Image auf die Picturebox setzt, das alte Entsorgst (Dispose()), dann läuft Dir der Speicher nicht voll.

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. Dim i As Image = Image.FromFile(GeneralHelper.GetFileFromDesktopString("1.jpg"))
    3. Dim g As Graphics = Graphics.FromImage(i)
    4. Dim s As String = "huhu"
    5. g.DrawString(s, New Font("Arial", 200), Brushes.Red, New PointF(0, 0))
    6. g.Dispose()
    7. If Not IsNothing(Me.PictureBox1.Image) Then
    8. Me.PictureBox1.Image.Dispose()
    9. End If
    10. Me.PictureBox1.Image = i
    11. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    DrVisualBasic schrieb:

    Leider klappt es immer noch nicht.
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Nummer As Integer = 0
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. Nummer += 1
    5. PictureBox1.Invalidate()
    6. End Sub
    7. Private Sub PictureBox1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    8. e.Graphics.DrawString(Nummer.ToString, Me.Font, Brushes.Black, New Point(10, 10))
    9. End Sub
    10. End Class
    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!