Ich modifiziere die Desktop-Duplizierung api-Beispiel kindly provided by Microsoft, um den Bildschirm zu erfassen und Updates über das Netzwerk an meine Anwendung zu senden. Ich weiß, wie man die Daten tatsächlich sendet; Mein Problem ist, die Daten vom ID3D11Texture2D Objekt zu bekommen.Abrufen von ID3D11Texture2D-Daten zum Senden über das Netzwerk
ID3D11Texture2D* m_AcquiredDesktopImage;
IDXGIResource* desktopResource = nullptr;
DXGI_OUTDUPL_FRAME_INFO FrameInfo;
// Get new frame
HRESULT hr = m_DeskDupl->AcquireNextFrame(500, &FrameInfo, &desktopResource);
// QI for IDXGIResource
hr = desktopResource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<void **>(&m_AcquiredDesktopImage));
An diesem Punkt denke ich, das Bildschirm-Updates in m_AcquiredDesktopImage
ist. Ich muss diese Daten über die Leitung übertragen (so effizient wie möglich).
This answer scheint auf dem richtigen Weg zu sein, aber ich bin neu in Windows-Programmierung, also brauche ich etwas zusätzliche Hilfe.
Dies ist die einzige Lösung, die ich vorstellen kann
IDXGIObject::GetPrivateData
Dank. Ich denke, dass ich das vielleicht kann. In welchem Format werden die resultierenden Daten gespeichert? (Da ich die entsprechenden Bildschirmbereiche auf dem Client aktualisieren muss) Auch einige Pseudocode wäre enorm hilfreich. – cilki
'ID3D11Texture2D :: GetDesc' bekommt Sie das Format. Es wird im Grunde das gleiche Format haben, weil ['ID3D11DeviceContext :: CopyResource'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ff476392) begrenzte Konvertierungsfähigkeiten hat:" Muss kompatible DXGI-Formate haben , was bedeutet, dass die Formate identisch oder zumindest aus der gleichen Typengruppe sein müssen ". –
@RomanR. Das macht Sinn. Ich bin zuversichtlich, aber ich habe Probleme mit der Erstellung eines zweiten ID2D11Texture2D im "Staging-Speicher-Pool". Welche Methoden brauche ich, um das zu erreichen? Ich weiß, wie man die alte Beschreibung bekommt, aber ich bin verloren mit "ändern Sie den Pool und entfernen Sie die Bindung." Ist das die richtige Methode: 'ID3D11Device :: CreateTexture2D' – cilki