Frage

Ich habe IDirect3DSurface9, Standard-Pool, YUV-Format. Wie kann ich effizient Bits davon Bitmap? Im Moment habe ich:

    erstellen Ziel machen:
    device->CreateRenderTarget(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DMULTISAMPLE_NONE, 0, TRUE, &render_target, NULL)
    convert YUV zu RGB32:
    device->StretchRect(videomem_surf, NULL, render_target_, NULL, D3DTEXF_NONE)
    (Vollständiges Rechteck, kein Strecken)
    Ebene offscreen Oberfläche im Systemspeicher
    erstellen device->CreateOffscreenPlainSurface(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &sysmem_offscreen_surf, NULL)
    Kopieren von Daten von Video mem zu sysmem:
    device->GetRenderTargetData(render_target, sysmem_offscreen_surface)
    GetDC von Off-Screen-Oberfläche, schaffen kompatibel DC und kompatible Bitmap BitBlt von Offscreen sufrace DC an kompatible DC und kopieren Bitmap-Bits zu meinem Puffer durch GetDIBits ()

sieht das ein wenig Overhead, weil so viele Kopieren: von den ursprünglichen Oberfläche Ziel zu machen, dann zu offscreen Oberfläche, dann an kompatible Bitmap, und dann schließlich zu meinem Puffer. Wie kann diese verbessert werden?

Dank

scroll top