Hallo,
schon mal vielen Dank für die vielen Antworten. Vielleicht muss ich mein Problem mal etwas genauer erläutern
Ich habe eine Form mit mehreren Devices, die sich alle dieselbe Szene aus unterschiedlichen Perspektiven ansehen. Nun soll man in jedem Device ein Bitmap generieren können, uU. in einer anderen Auflösung.
Dazu habe ich eine eigene Methode. In dieser wird ein neues Device erzeugt, das die gewünschte Auflösung hat. In dieses wird die Szene aus der Sicht der entsprechenden Kamera gerendert. Nun soll von diesem Device der Inhalt in eine Datei geschrieben werden.
Die Idee mit dem FrontBuffer scheidet damit schon mal aus, da im Frontbuffer der ganze Bildschirminhalt steht und nicht nur das einzelne Fenster (?) . Bleibt also der BackBuffer. Wenn man bei den PresentParameters das PresentFlag auf LockableBackBuffer setzt, kann man den locken und damit auch eigentlich auf die Daten zugreifen. Folgende zwei Zeilen sollten einen Stream liefern, der die Daten enthält:
Surface backBuffer = dev.GetBackBuffer(0,0,BackBufferType.Mono);
GraphicsStream gs = backBuffer.LockRectangle (LockFlags.ReadOnly);
Leider scheint in diesem Stream nicht das gewünschte drinzustehen. Zum einen hat er eine Länge von 2147483647, was bei einer Auflösung von 517x835 etwas viel sein dürfte. Der Backbuffer hat das Format R5G6B6, was ja bedeutet, dass 16 Bit bzw. 2 Byte für ein Pixel stehen. Bei einem komplett schwarzen Device sollten also alle Pixel 0 sein. Das ist aber auch nicht der Fall.
Weiß also jemand, ob
1.) der Ansatz über BackBuffer und GraphicsStream ein erfolgversprechender ist, und falls ja,
2.) wie der GraphicsStream ausgelesen werden muss bzw. welches Format er hat (Header, Daten etc ?).
Troubleshooter