Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: GLScene - Aktuelles Frame in 32bit-Bitmap speichern...Wi

  Alt 10. Mär 2010, 23:37
Es gibt zwei mögliche (sogar wahrscheinliche) Ursachen:

1) Der Export als BMP wird recht wahrscheinlich irgendwann mal über die GDI laufen, und BMP ist von Hause aus ein Format, dass an und für sich urprünglich ohne Alphakanal konzipiert war. Die gesamte GDI und andere Teile von Windows haben darunter lange Zeit leiden müssen, und leichte Besserung war erst mit GDI+ in Sicht. Die Frage ist also hier welchen Weg der Snapshot bis hin zur Datei auf der Platte nimmt.

2) Display-Buffer haben in aller Regel ein Format ohne Alphakanal (welcher Bildschirm kann schon durchsichtig werden?), und selbst wenn das Format an sich mit Alpha ist, so besteht dennoch eine gute Chance, dass die API diesen ignoriert wenn es weiss dass es um den Front-/Backbuffer geht. Ich kenne mich mit OpenGL allerdings zu wenig aus um da eine definitive Aussage zu machen.

Grundsätzlich wird zumindest bei DirectX empfohlen eine Offscreen (=normale, loose) Textur als Rendertarget zu setzen, und dann ihr Surface 0 zu exportieren. Für die Anzeige wird dann noch ein schnelles Fullscreen-Quad mit dieser Textur in den eigentlichen Backbuffer als Target geschmissen, was bei den meisten Spielen durch die Fullscreen-Post-Effekte ohnehin ansteht. Zudem würde ich dringend empfehlen in ein anderes Format zu exportieren, dass auch wirklich Alpha unterstützt, und zwar vom Kern an. Da wären vor allem TIFF, TGA und PNG nennenswert.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat