BitBlt mit Overhead?



  • Wenn ich in einem C++ Programm BitBlt verwende dauert der Aufruf ca. 4 Millisekunden - wenn ich BitBlt in der Form in meinem C# verfügbar mache:

    #region DLL_Imports_User32_GDI
    [DllImport("user32.dll")]
    private static extern IntPtr GetDesktopWindow();
    
    [DllImport("gdi32.dll")]
    private static extern bool BitBlt(
    	IntPtr hdcDest, // handle to destination DC
    	int nXDest, // x-coord of destination upper-left corner
    	int nYDest, // y-coord of destination upper-left corner
    	int nWidth, // width of destination rectangle
    	int nHeight, // height of destination rectangle
    	IntPtr hdcSrc, // handle to source DC
    	int nXSrc, // x-coordinate of source upper-left corner
    	int nYSrc, // y-coordinate of source upper-left corner
    	System.Int32 dwRop // raster operation code
    	);
    
             private const Int32 SRCCOPY    = 0xCC0020;
    	private const Int32 MERGEPAINT = 0xBB0226;
    	private const Int32 PATINVERT  = 0x5A0049;
    	#endregion
    

    dann Dauert der Aufruf ca. 350 Millisekunden... woher kommt dieser Overhead?



  • 2 Dinge... Es gibt sowas wie DirectX for managed code, wo du direkt für .Net eine Schnittstelle für sowas hast. Das erklärt zwar nicht 350 ms, aber so ein DllImport wird schon nicht der schnellste sein.
    Das zweite ist, dass DirectDraw sowieso schon seit Jahren komplett tot ist. Verwende lieber Direct3D, auch wenn du 2D-Grafiken darstellen willst.



  • ich will nur sachen nutzen, die überall standardmäßig vorhanden sind - dx gibts halt nicht auf jedem rechner - oder wie sieht das aus?
    wenn ich mich nicht täusche kommt WinXP mit DX 8 oder?

    das ganze benötige ich für ein fernwartungstool - ich capture den screen und schick in über die Leitung

    das capturen des Screens mit BitBlt kostet aber pro aufruf unheimlich viel Zeit
    vielleicht überleg ich mir das mit dx nochmal



  • aaah ich dachte vorhin BitBlt ist DDraw, aber anscheinend ist es ne GDI-Funktion. Von Direct3D 8 kannst du bei Windows XP ausgehen. Ob des jetzt aber noch so geil ist, musst du selber rausfinden. Ich dachte, du benutzt DDraw und davon wollte ich dich abbringen. 😉


Anmelden zum Antworten