Ändern der Größe einer DXGI-Ressource oder von Texture2D in SharpDX

Ich möchte die Größe eines mit der Desktop-Duplikations-API in SharpDX aufgenommenen Bildschirms ändern. Ich benutze dieScreen Capture-Beispielcode aus dem SharpDX-Beispielrepository, relevanter Teil folgt:

SharpDX.DXGI.Resource screenResource;
OutputDuplicateFrameInformation duplicateFrameInformation;

// Try to get duplicated frame within given time
duplicatedOutput.AcquireNextFrame(10000, out duplicateFrameInformation, out screenResource);

if (i > 0)
{
    // copy resource into memory that can be accessed by the CPU
    using (var screenTexture2D = screenResource.QueryInterface<Texture2D>()) 
    device.ImmediateContext.CopyResource(screenTexture2D, screenTexture);

    // Get the desktop capture texture
    var mapSource = device.ImmediateContext.MapSubresource(screenTexture, 0, MapMode.Read, MapFlags.None);

    System.Diagnostics.Debug.WriteLine(watch.Elapsed);

    // Create Drawing.Bitmap
    var bitmap = new System.Drawing.Bitmap(width, height, PixelFormat.Format32bppArgb);
    var boundsRect = new System.Drawing.Rectangle(0, 0, width, height);

    // Copy pixels from screen capture Texture to GDI bitmap
    var mapDest = bitmap.LockBits(boundsRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);
    var sourcePtr = mapSource.DataPointer;
    var destPtr = mapDest.Scan0;
    for (int y = 0; y < height; y++)
    {
        // Iterate and write to bitmap...

Ich möchte das Bild viel kleiner als die tatsächliche Bildschirmgröße ändern, bevor ich es als Byte-Array verarbeite. Ich brauche das Bild nicht zu speichern, sondern komme nur auf die Bytes. Ich möchte dies relativ schnell und effizient erledigen (z. B. wenn möglich die GPU einsetzen).

Ich kann während nicht skalierenCopyResource, da die Ausgabeabmessungen mit den Eingabeabmessungen identisch sein müssen. Kann ich eine weitere Kopie von meinem ausführen?screenTexture2D zu skalieren? Wie skaliere ich die Ressource genau - verwende ich eine Swap-Kette, eine Matrix-Transformation oder etwas anderes?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage