Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

1

30.09.2014, 15:32

[C#] DrawToBitmap funktioniert nicht mit Zeichnungen mit Graphics

Hallo Community,

ich möchte einen Screenshot von einem Panel erstellen und habe dazu dessen DrawToBitmap-Methode benutzt. Eswird alles schön in ein Bitmap gezeichnet und ich kann mir diese auch anzeigen lassen, nur fehlt der Inhalt, der von "mir selber" mit einem Graphicsobjekt in der OnPaint-Methode gezeichnet wird. Ich sehe also nur einen grauen Hintergrund und keine Zeichnung :( , die aber zur Zeit, als ich den Shot gemacht habe für den User auf dem Bildschirm sichtbar war. Genauso ist das auch, wenn ich von der gesamten Form einen Screenshot mache: Alle 40 Controls werden gezeichnet, aber die bunten Linien :) auf dem Panel fehlen!

Ich hoffe mir kann jemand helfen!
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

2

02.10.2014, 20:45

Was ist los Leute? :D Kennt keiner das Problem oder habe ich eine einfache Lösung übersehen? Kann mir jemand wenigstens zusagen, ob das wirklich so ist bzw. bei jemandem anders reproduzierbar ist!
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

02.10.2014, 21:09

Ohne Code sehe ich hier nur Bahnhof.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

4

02.10.2014, 22:11

Zeichne doch die Grafik nachträglich auf die Bitmap.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

5

03.10.2014, 16:41

Zeichne doch die Grafik nachträglich auf die Bitmap.
Könnte ich machen, aber die Grafik ist sehr aufwendig zu zeichen (Diagramm). Und es soll nicht nur bei dieser Grafik bleiben - das muss also anders gelöst werden!

Ohne Code sehe ich hier nur Bahnhof.
Ich versuche mal den "relevanten" (es sind sonst 6000 Zeilen...) Code zu posten:

C#-Quelltext

1
2
3
4
5
6
7
8
9
// Hiermit fertigt das Formular (Hauptfenster) einen Screenshot von sich an
public Image GetDataScreenShot()
{
    int Breite = this.Width;
    int Höhe = this.Height;
    Bitmap b = new Bitmap(Breite, Höhe);
    this.DrawToBitmap(b, Rectangle.FromLTRB(0, 0, Breite, Höhe));
    return b;
}


C#-Quelltext

1
2
3
4
5
// Der Code wird ausgeführt, wenn der Weiter-Button des Druck Dialogs geklickt wird
private void PrintScreen()
{
    pictureBox1.Image = ((Hauptfenster)Owner).GetDataScreenShot();
}

Ich habe ein Bild vom Druckdialog plus Screenshot (wo das Diagramm ja fehlt) angehangen und ein Bild vom Original. Das Diagramm wird in der OnPaint-Methode des UserControls gezeichnet. Die Methode müsste auch korrekt implementiert sein, weil der Inhalt ja korrekt angezeigt wird - eben nur nicht im Screenshot, der vom Programm selbst angefertigt wird! :( Wenn noch Code fehlen sollte oder ihr noch andere Informationen braucht, dann sagt Bescheid - ich gebe sie euch gerne, wenn mir das möglich ist!

PS: Weil die Informationen vertraulich sind, habe ich einige Sachen auf meinen Screenshots unkenntlich gemacht. Ich bitte darüber hinwegzusehen und keinerlei Vermutungen anzustellen was das sein könnte! ;) Wers weiß und nicht behalten kann, darf mich per PM nerven! ;)
»CeDoMain« hat folgende Bilder angehängt:
  • Original.png
  • Screenshot.png
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

6

04.10.2014, 04:35

Ich hab nicht viel gelesen, aber versuch OnPrint zu überschreiben.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

7

04.10.2014, 20:37

@BirdFreeYahoo: Ein Panel hat leider keine OnPrint-Methode bzw. ein Print-Event!

@BlueCobold: Verstehst du immernoch Bahnhof? Oder fällt dir auch nichts ein?
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

04.10.2014, 21:09

Vermutlich ruft DrawToBitmap die OnPaint nicht auf. Würde ich mal nachprüfen. Wenn nicht, DrawToBitmap überschreiben und die eigenen Draw-Methoden dort ebenfalls aufrufen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

9

05.10.2014, 13:00

Ich habe das Programm im Debugger ausgeführt und da springt er in meine Zeichenmethode. Ich habe das testweise so umgeändert, dass nicht OnPaint überschrieben wird, sondern das Paint-Event abgefangen wird und dann gezeichnet wird! Das hat aber leider den gleichen Effekt, bis auf, dass man jetzt sieht, dass das Diagramm neu gezeichnet wird (kurzes verschwinden und wiederauftauchen des Diagramms), wenn ein Screenshot erstellt wird. Aber es ist trotzdem nicht auf dem Screenshot zu sehen. :( Kann es sein, dass das Paint-Event NACH dem Erstellen des Screenshots aufgerufen wird?

Ich wüsste auch nicht, wie ich die DrawToBitmap überschreiben sollte, weil ich muss ja am Ende der Methode base.DrawToBitmap(...); aufrufen, damit ein Screenshot erstellt wird und das bringt ja nix, weil DrawToBitmap anscheinend nochmal alles neuzeichnen lässt. :(

Ist es irgendwie möglich noch anders einen Screenshot (oder ein Bild mit höherer Auflösung) zu erstellen, ohne dass ein Steuerelement dafür angepasst werden muss? Denn ich will am Ende nicht nur vom Diagramm ein Bild machen können, sondern von allen Tabs im TabControl (4 Stück - siehe Bild "Original"). Und das bleibt nicht bei dieser Anzahl...

Ich hoffe das war einigermaßen verständlich... :)
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

05.10.2014, 13:04

Ich wüsste auch nicht, wie ich die DrawToBitmap überschreiben sollte, weil ich muss ja am Ende der Methode base.DrawToBitmap(...); aufrufen, damit ein Screenshot erstellt wird und das bringt ja nix, weil DrawToBitmap anscheinend nochmal alles neuzeichnen lässt. :(
Äh, wieso? Du lässt erst alles von base in das Bitmap malen und malst dann das Diagramm zusätzlich rein.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige