Home - Programmieren - Visual Basic - Screenshots mit Direct3D (VB)
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] Screenshots mit Direct3D (VB) In diesem Artikel geht es um das Speichern eines Screenshots einer Direct3D-Anwendung in eine Bitmap-Datei auf der Festplatte. Laut Dokumentation stellt uns DirectX keine solche Funktion in VB zur Verfügung, allerdings gibt es eine undokumentierte Methode SaveSurfaceToFile, die zur D3DX8-Klasse gehört. Die Vorgehensweise sieht nun folgendermaßen aus:
Deklarationen
Soweit zu den benötigten Deklarationen für unsere Funktion. Zunächst deklarieren wir die Surface in die das Bild des FrontBuffers gespeichert werden soll (Surf). Außerdem benötigt die Methode SaveSurfaceToFile als vierten Parameter eine leer(!) übergebene Variable vom Typ PALETTEENTRY (Palette). r ist eine einfache Variable, die ein Rechteck beschreibt. Dispmode wird benötigt, um die aktuelle Bildschirmauflösung auszulesen. Zum Schluss schalten wir noch die Fehlerbehandlung ein. Bildschirmauflösung ermitteln Für das Ermitteln der Bildschirmauflösung müssen wir auf die GetDisplayMode-Methode des als Parameter dev übergebenen Direct3DDevice8 zurückgreifen.
Da DispMode by reference an die GetDisplayMode-Methode übergeben wird, befindet sich nach Aufruf der Funktion die aktuelle Bildschirmauflösung in dieser Variablen. Neue Surface erstellen Im nächsten Schritt wird die Surface erstellt, die den Screenshot des FrontBuffers aufnehmen wird. Die Surface wird in Größe der Bildschirmauflösung erzeugt.
Die Surface wird als D3DFMT_A8R8G8B8 erstellt, da, wie Sie im nächsten Schritt sehen werden, der FrontBuffer nur in diesem Format von DirectX zurückgegeben werden kann. FrontBuffer in Surface schreiben Der FrontBuffer beinhaltet den aktuellen Bildschirminhalt. Der Screenshot wird mit GetFrontBuffer in die zuvor angelegte Surface kopiert.
Auch hier erfolgt die Übergabe von Surf by reference, so dass nach Aufruf der Funktion in Surf der Screenshot gespeichert ist. Dieser muss nun nur noch auf Festplatte gesichert werden. Screenshot auf Festplatte speichern Die Methode SaveSurfaceToFile erwartet 5 Parameter. Der erste ist der Dateiname unter dem der Screenshot gespeichert werden soll. Danach wird durch die DirectX-Konstante D3DXIFF_BMP das Speicherformat festgelegt. Als dritten Parameter muss an die Funktion die Surface Surf und als vierten Parameter die leere Palette übergeben werden. Zum Schluss wird mit Hilfe der RECT-Variablen r festgelegt, welcher Ausschnitt der Surface gespeichert wird. Deshalb müssen wir diese Variable vor Aufruf der Funktion noch vorbereiten.
Da wir den kompletten Bildschirm einfangen möchten, wird auch r mit der aktuellen Bildschirmauflösung versorgt. Zusammenfassung Als Zusammenfassung hier noch mal der komplette Quelltext der Funktion ohne Erklärungen zum schnellen Einfügen in das eigene Projekt.
|
![]() ![]() ![]()
Autoren:04619
Artikel:00815 Glossar:04116 News:13564 Userbeiträge:16556 Queueeinträge:06268 ![]()
Projektsteuerung statt Anwesenheitskontrolle
MONDroid - your monitoring Solution for Android with PRTG-Support Red-Hosting jetzt mit erweitertem Shop-Webhosting-Angebot [Mehr News] ![]()
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
|