Ich poste es auch noch mal hier rein, weil im anderen Thread geht es um das ganze Projekt an sich, hier nur um eben genau jene Funktion.
Ich hab mal etwas rumgesucht und dabei diesen VS C++ DDL/Lib Source gefunden, den ich nun versucht habe zu verwenden:
https://github.com/bryal/DXGCapDas kompilieren des C++ Codes hat auf Anhieb Fehlerfrei funktioniert.
In PB sieht mein Code nun so aus, der leider nicht richtig funktioniert.
Code:
UsePNGImageEncoder()
Define cs = 0, Width.i, Height.i, buf_size.i, *buf = #Null, o_size.i, *o_bytes
Import "DXGCap.lib"
create_dxgi_manager()
delete_dxgi_manager(*dxgi_manager)
get_capture_source(*dxgi_manager)
get_frame_bytes(*dxgi_manager, o_size, *o_bytes)
get_output_dimensions(*dxgi_manager, Width, Height)
refresh_output(*dxgi_manager)
set_capture_source(*dxgi_manager,cs)
set_timeout(*dxgi_manager,timeout)
EndImport
*dxgi_manager = create_dxgi_manager()
Debug *dxgi_manager ; sollte größer 0 sein
get_output_dimensions(*dxgi_manager,@Width,@Height)
Debug "w:"+Str(Width) + " h:" + Str(Height) ; wird korrekt angezeigt
refresh_output(*dxgi_manager)
Debug get_frame_bytes(*dxgi_manager,@buf_size,@*buf) ; sollte größer 0 sein
Debug get_capture_source(*dxgi_manager) ; gibt 0 aus
CreateImage(0,Width,Height,24,RGB(255,255,255))
x = 0 : y = 0 : z = 0
Debug PeekB(*buf) ; sollte nicht 0 sein, außer der erste SubPixel links oben ist tatsächlich 0 (bei Blau)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Default)
For y = 0 To Height-1
For x = 0 To Width-1
Plot(x,y,RGB(PeekB(*buf+z+2),PeekB(*buf+z+1),PeekB(*buf+z))) ; BGRA8 Format
z + 4
Next
Next
StopDrawing()
SaveImage(0,"testdxgi.png",#PB_ImagePlugin_PNG)
delete_dxgi_manager(*dxgi_manager)
Vielleicht sieht ja Jemand direkt wo das Problem liegen könnte. Ich schau mir das später noch mal an.
Nur quick und dirty zum testen.
Das Problem ist nun, dass er zwar die Bildschirm Auflösung korrekt ausließt und auch der Puffer mit den Bilddaten die korrekt Größe zu haben scheint (H * B * 4 inkl. Alpha), aber ich krieg als Farbwerte nur lauter 0er zurück und damit ein komplett schwarzes Bild.
Edit: merkwürdig ist auch, dass wenn ich den Code kompiliere und per Exe ausführe, er am Ende kein Bild erstellt, mit Debugger aber schon.