Ich bin neu in Direct X, aber ich war erfolgreich in der Lage, die Windows Desktop-Duplizierungs-API zur Videoaufnahme zu verwenden. Die API ermöglicht Ihnen auch, Mauszeigerinformationen einschließlich der Position, Höhe, Breite und der Rohpixeldaten (im Systemspeicher) des Cursorbildes abzurufen. Der Mauszeiger wird standardmäßig nicht auf dem erfassten Bildschirmbild gezeichnet, sondern muss manuell bearbeitet werden.Kopieren von ID3D11Texture2D mit richtigem Alpha
Ich versuche, diese Mauszeigerdaten auf das Hauptbildschirm-Capture-Bild zu "kopieren", um ein einzelnes Bild mit einem sichtbaren Mauscursor zu erstellen. Bisher war es mir möglich, den Cursor anzuzeigen, indem ich aus den Cursor-Pixeldaten einen ID3D11Texture2D
erstellte und dann einen ID3D11DeviceContext::CopySubresourceRegion
vorformte, um den Cursor auf das Hauptbildschirmbild zu kopieren, das ebenfalls als ID3D11Texture2D
gespeichert wurde. Die Bildtextur des Hauptbildschirms befindet sich immer im Format und die Roh-Cursor-Pixeldaten seems to be in the same format, mindestens für die DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR
Form.
Mein aktuelles Problem scheint mit der Alpha-Handhabung dieser Kopie zu tun zu haben. Der Cursor wird angezeigt, aber wenn das Rechteck kopiert wird, wird das Alpha, das den Cursor umgibt, stattdessen schwarz ausgefüllt. Hier ist ein Beispiel wie es aussieht: Black border around mouse
Es ist mir auch wichtig, dass dies im Videospeicher passiert, da die endgültige Textur direkt vom Videospeicher in einen Videoencoder übergeht.
Ich bin bereit, meine Methode zu ändern, wenn CopySubresourceRegion
nicht das richtige Werkzeug für den Job ist. Irgendwelche Ideen, wie ich diesen Cursor auf den Hauptbildschirm Bildtextur mit richtigem Alpha bekommen kann?
Es wird von der Antwort impliziert ist, aber es lohnt die besagt, explizit, dass 'CopySubresourceRegion' Alpha-Blending nicht ausführt. Stattdessen erstellt es eine einfache rechteckige Kopie und überschreibt alle Kanäle im Ziel (einschließlich Alpha). Der Grund dafür, dass Sie schwarz sehen, liegt darin, dass die Ursprungstextur {0,0,0,0} außerhalb des Cursorbereichs oder transparent schwarz ist. Bei der Anzeige wird der Alphakanal für die Anzeige ignoriert, was zu opakem Schwarz führt. – MooseBoys
Danke Leute, ich komme dazu, nach einer erfolgreichen Implementierung werde ich für die Annahme zurückkommen. – chrisd1100