Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Directx bitmap stretchen/Skalieren

  Alt 2. Jan 2014, 21:51
Was den Screenshot angeht, ist die GDI Methode, laut eines Artikels, den ich letztens gelesen habe, sogar noch schneller, als es per OffscreenSurface zu machen. Aber du hast natürlich recht, dass du per GDI wohl keine Hardware Accellerated Windows capturen kannst.

Ich schaue, wenn ich daheim bin, nochmal ob ich es über den Umweg über eine Textur hinbekomme.
Ja aber nur wenn man den Buffer nicht selbst zuweist siehe(scrSurface.LockRect) und das über GetFrontBufferData regelt.
Das bremst das ganze natürlich aus.
Bei einem ScreenShot spielt das keine rolle in einer Renderscene hingegen schon.

Link zu dem Thema
Ich habe mal versucht seine Methode nach zu verfolgen.. aber auch hier keine Chance.

Zitat von dort!
  1. Via CreateRenderTarget() eine temporäre Render-Target-Textur anlegen (ohne AA und in dem Format, das man haben will). Das ist das einzige, wo StretchRect() den Back Buffer reinkopieren kann.
  2. Via StretchRect() den Back Buffer in das temporäre Render Target kopieren. Dabei wird das Antialiasing aufgelöst.
  3. Via CreateOffscreenPlainSurface() einen Systemspeicherpuffer anlegen. Muss unbedingt im D3DPOOL_SYSTEMMEM liegen, weil GetRenderTargetData() nur dorthin kopieren kann;
    und dasselbe Format haben wie das temporäre Render Target.
  4. Via GetRenderTargetData() das temporäre Render Target in den Systemspeicherpuffer kopieren.
  5. Lock() benutzen, um auf die Daten zuzugreifen.


Zitat:
Direct3D9: (ERROR) :If the destination surface is an offscreen plain surface, the source must also be an offscreen plain. StretchRect failed
Danke dir das du versuchst mir weiter zu helfen.


gruss

Geändert von EWeiss ( 2. Jan 2014 um 22:14 Uhr)
  Mit Zitat antworten Zitat