Ich habe meine eigene einfache 3D-Engine-Klasse (myGraphics
), die ihre Ergebnisse in einer Bitmap-Variable speichert. Diese Bitmap wird dann in eine PictureBox (PictureBox.Image = myGraphics.bmp
)Wie Zeichenketten auf WindowsForms Picturebox zeichnen?
platziert Dies funktioniert gut, das Problem kam, als ich einige Punkte auf der Zeichnung markieren musste. Da es keine integrierte Methode zum Zeichnen von Zeichenfolgen auf Bitmap gibt, folgte ich Lösungen in ähnlichen Fragen und jetzt habe ich eine Graphics
Variable auf meinem myGraphics
, so dass ich die Zahlen dort zeichnen kann. Die wichtigen Bits des Codes sind wie folgt:
public class myGraphics
{
public Graphics g;
public void initialize(int W, int H)
{
//sets some values
g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
}
public void draw()
{
// code to draw on myGraphics.bmp
markpoints();
}
public void markpoints()
{
if (draw_points) {
foreach (objecto ob in solidos) {
for (int p = 0; p < ob.viewpoints.Count; p++)
{
// determine position of text (x, y)
SolidBrush drawBrush = new SolidBrush(Color.Black);
g.DrawString(p.ToString(), new Font("Arial", 10), drawBrush, x, y);
g.Flush();
}
}
}
}
Nun, wenn ich es richtig verstanden habe, g.Flush() sollte die Grafiken g auf dem Bitmap fusionieren, aber es ist nicht so funktioniert, so dass ich die rechtes Bild, aber keine Stiche darauf.
Ich habe es auch versucht: myGraphics.g = PictureBox.CreateGraphics();
, um es zu lösen. Bei der Verwendung von Breakpoints im Debug-Modus habe ich festgestellt, dass die Strings mit dieser Methode auf dem Steuerelement angezeigt werden, aber direkt nach der Aktualisierung von PictureBox gelöscht werden.
Also, wie kann ich das lösen, damit ich die Zahlen auf der Zeichnung angezeigt bekommen kann?
Sie ändern die Bitmap, aber es gibt keine Möglichkeit, dass die PictureBox dies wissen kann. Die Image-Klasse hat keine Ereignisse. Es weiß also nicht, dass es das Bild neu streichen muss. Es liegt an Ihnen, die PictureBox 'Invalidate() -Methode aufzurufen, jetzt weiß es. –
das war nicht das Problem, aber es brachte mich dazu, so danke. es ist irgendwie ein dummer Fehler, noch werde ich eine Antwort schreiben –