Entwickler-Ecke

Basistechnologien - Text auf eine PictureBox Zeichnen Problem


-CrimeTime- - Di 16.11.10 09:12
Titel: Text auf eine PictureBox Zeichnen Problem
Hallo,
ich versuche derzeitig mit Hilfe einer PictureBox Texte auf bestimmten Positionen Zeichnen zu lassen, doch leider übernimmt er die X und Y Position nicht, und Zeichnet alles auf einen Punkt (in der Mitte der PictureBox).

Hier der Code:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
private Bitmap DrawText(Bitmap img, String Text, int XPos, int YPos)
        {
            Graphics grf = Graphics.FromImage(img);
            Font myFont = new Font("Arial"8);
            grf.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            try
            {
                using (myFont)
                {
                    grf.DrawString(Text, myFont, Brushes.Red, new Point(XPos, YPos));
                }
            }
            finally
            {
                grf.Dispose();
                myFont.Dispose();
            }
            return img;
        }


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


traceurmicha - Di 16.11.10 12:45

Hallo,

vielleicht liege ich jetzt auch falsch, aber kann es sein das DrawString() statt new Point(int x, int y) vielleicht new PointF(float x, float y) braucht?


-CrimeTime- - Di 16.11.10 12:51

also, ich habe eine Source die GNU Lizenziert ist, diese bin ich am umschreiben bzw. am nach Programmieren.

in dieser GNU Source Funktioniert der Code 1A doch meiner überhaupt nicht.

Hier der Code aus der GNU Source:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        private Bitmap DrawText(Bitmap img, String TextToDraw, int XPos, int YPos)
        {
            Graphics G = Graphics.FromImage(img);
            G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            Font DrawFont = new Font("Arial"8);

            G.DrawString(TextToDraw, DrawFont, Brushes.Black, new Point(XPos, YPos));

            G.Dispose();
            DrawFont.Dispose();

            return img;
        }


meiner ist ja Oben gepostet.


EDIT: aber selbst wenn ich diesen Code so 1:1 übernehme geht es auch nicht, weißt du evtl. woran das noch liegen könnte?


Gruß Crime

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


traceurmicha - Di 16.11.10 12:58

Also auf den ersten blick sehe ich da nichts...
versuch mal dein Projekt schrittweise zu debuggen und schau was passiert, so kannst du den Fehler denke ich leister einkreisen.

Gruß
Micha


Th69 - Di 16.11.10 15:41

Hallo CrimeTime,

du schreibst oben etwas von einer PictureBox, deine Methode verwendet aber direkt ein Image (bzw. Bitmap).
Wie rufst du deine Methode denn auf und hast du der PictureBox überhaupt ein genügend grosses Image zugewiesen?

P.S. bgzl. Eliminierung der Dispose-Methode mittels "using", sollte der Code dann so aussehen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private Bitmap DrawText(Bitmap img, String text, int xPos, int yPos)
{
    using(Graphics g = Graphics.FromImage(img))
    {
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        using(Font font = new Font("Arial"8))
            g.DrawString(text, font, Brushes.Black, new Point(xPos, yPos));
    }  
    return img;
}

(lokale Variablen/Parameter sollten am Anfang klein geschrieben werden...)


-CrimeTime- - Di 16.11.10 18:15

also das hat das Problem immer noch nicht gelöst, aber hier die Definitionen:

Quelltext
1:
2:
3:
        static int pbHeight = 542;
        static int pbWidth = 542;
Bitmap Bitmap1 = new Bitmap(pbWidth, pbHeight);


Edit: die Methode wird so aufgerufen :

Quelltext
1:
DrawText(img, strName, Convert.ToInt32(XPos) - Convert.ToInt32((strName.Length) * 2.5), Convert.ToInt32(YPos) + 8);