Problem beim Schreiben von Text auf bild.


forsterm

Erfahrenes Mitglied
Hallo,
also ich verwende folgenden Code um einen Text auf ein Bild "zu schreiben":
Code:
        Dim bmp As Bitmap = CreateScreenshot()
        Dim grafik As Graphics
        Dim schrift As New Font("Arial Black", 36)
        Dim farbe As New SolidBrush(Color.Red)
        Dim position As New Point(10, 10)
        If CompKey(44) Then
            On Error GoTo err

            grafik = Graphics.FromImage(bmp)
            grafik.DrawString("Hallo User!", schrift, farbe, position)
            grafik.Dispose()
            schrift.Dispose()
            farbe.Dispose()

            bmp.Save(screenshot_path & "\Screenshot_" & Format(Date.Now, "dd.MM.yyyy-HH.mm.ss") & ext, image_type)
            bmp.Dispose()
            Exit Sub
err:
            MessageBox.Show("Fehler", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        End If

das funktioniert auch wunderbar, nur hab ich da noch folgende Probleme, die ich nicht gelöst bekomme.

1. Wie kann ich berechnen wie viel Platz der Text benötigt?
Hintergrund: Es geht darum, dem Benutzer zu ermöglichen auszuwählen in welcher
Ecke er den Schriftzug haben möchte. Wenn es sich dabei nicht um die linke
obere Ecke handelt muss ich ja die Position ungefähr so berechen:
bmp.Width - 10 und bmp.Height - 10.
Deswegen muss ja wissen, wie die Dimensionen des Textes sind, damit er nicht abgeschnitten wird.

2. Wie kann ich die Schriftfarbe z.B durch einen String definieren?
Hintergrund: Der Benutzer soll auf einer anderen Form durch den ColorDialog eine
Farbe auswählen können, diese soll dann in einer XML Datei gespeichert werden und
dann in einer anderen Form, da wo der Code von oben steht wieder verwendet
werden.

Bin für alle Lösungsvorschläge offen. :)

mfg
forsterm
 

Christian Kusmanow

Erfahrenes Mitglied
Hi!
  1. Schau Dir mal Graphics.MesureString an.
    [thread=258768]Zeilen drucken - Thread[/thread] (VB Code)
    [thread=257303][VC++ 2005] Font Größe[/thread] (C# Demo)
  2. Das sollte nicht so schwer sein. Du befüllst eine Hashtable mit den den Elementen aus deinem XML und dem entsprechendem Color Objekt (Dictionary<string><Color>). Danach kannst mit dem String als Indexer einfach auf die entsprechende Farbe zugreifen.
 

forsterm

Erfahrenes Mitglied
Hallo,
Hi!
  1. Schau Dir mal Graphics.MesureString an.
    [thread=258768]Zeilen drucken - Thread[/thread] (VB Code)
    [thread=257303][VC++ 2005] Font Größe[/thread] (C# Demo)
hat super funktioniert. :)
Zu Punkt 2, ich hab hier einfach die Funktionen ToArgb() und FromArgb() verwendet, weiß jetzt zwar nicht, ob es eine schönere/bessere Lösung gibt, aber ich gebe mich damit jetzt mal zufrieden. ;)

mfg
forsterm
 
Zuletzt bearbeitet:

Forum-Statistiken

Themen
272.363
Beiträge
1.558.641
Mitglieder
187.836
Neuestes Mitglied
MMazi