Frage

Ich benutze BitBlt () und CreateBitmapSourceFromHBitmap () ein Fenster als Bitmap zu erfassen, dass ich auf einem Bildelement in einer WPF-Anwendung angezeigt werden kann. Aber aus irgendeinem Grund, den größten Teil der Anwendung, dass es erfasst ist transparent. Hier ist eine Quelle vs. Aufnahme-Bild von dem, was passiert ist:


(Quelle: umbc.edu )

Es ist grau, weil der Hintergrund des Fensters auf, es ist grau. Was auch immer Hintergrund gebe ich das Fenster durchscheinen.

Wie kann ich das aufgenommene Bild, um genauer das Original reflektieren?

War es hilfreich?

Lösung

Das Problem in Ihrem Code könnte auf den Win32-API fällig Sie verwenden (CreateCompatibleDC, SelectObject, CreateBitmap ...). Ich habe versucht, mit einem einfacheren Code, nur mit GetDC und BitBlt, und es funktioniert gut für mich. Hier ist mein Code:

    public static Bitmap Capture(IntPtr hwnd)
    {
        IntPtr hDC = GetDC(hwnd);
        if (hDC != IntPtr.Zero)
        {
            Rectangle rect = GetWindowRectangle(hwnd);
            Bitmap bmp = new Bitmap(rect.Width, rect.Height);
            using (Graphics destGraphics = Graphics.FromImage(bmp))
            {
                BitBlt(
                    destGraphics.GetHdc(),
                    0,
                    0,
                    rect.Width,
                    rect.Height,
                    hDC,
                    0,
                    0,
                    TernaryRasterOperations.SRCCOPY);
            }
            return bmp;
        }
        return null;
    }

Ich habe versucht, es in Windows Forms und WPF (mit Imaging.CreateBitmapSourceFromHBitmap), es funktioniert gut in beiden Fällen die gleiche Screenshot (SO Seite in Firefox).

HTH,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top