gpt4 book ai didi

c# - WPF 图像不会显示 BitmapSource

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:07 26 4
gpt4 key购买 nike

我是 WPF 和 GDI 的新手,在显示图像时遇到问题。我的最终目标是构建类似暴露的东西。到目前为止,我将屏幕变灰,收集所有事件的 HWND,并捕获所有窗口的屏幕。现在,我有一个 Image 元素,我尝试为其设置源,但没有任何显示。

foreach (IntPtr hwnd in hwndlist)
{
IntPtr windowhdc = GetDC((IntPtr) hwnd);
IntPtr bmap = CreateBitmap(400, 400, 1, 32, null);
IntPtr bitmaphdc = GetDC(bmap);
BitBlt(bitmaphdc, 0, 0, System.Convert.ToInt32(this.Width), System.Convert.ToInt32(this.Height), windowhdc, 0, 0, TernaryRasterOperations.SRCCOPY);
ReleaseDC(hwnd, windowhdc);
BitmapSource bmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
image1.Source = bmapSource;
image1.BeginInit();
}

完整代码在这里:
http://pastebin.com/m70af590 - 代码
http://pastebin.com/m38966750 -xaml

我知道我现在拥有它的方式对我正在尝试做的事情没有多大意义(运行循环并一遍又一遍地写入同一个图像),但我希望能有一些东西最后那个图像。

我已经尝试对可见窗口的 HWND 进行硬编码,但它仍然无法正常工作。

感谢您的帮助!

最佳答案

我认为使用 Memory DC 可以解决您的问题。为此,首先导入:

[DllImport("gdi32.dll", EntryPoint = "CreateCompatibleDC")]
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

[DllImport("gdi32.dll", EntryPoint = "SelectObject")]
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);

[DllImport("gdi32.dll",EntryPoint="DeleteDC")]
public static extern IntPtr DeleteDC(IntPtr hDc);

而不是这个:

IntPtr bitmaphdc = GetDC(bmap);
BitBlt(bitmaphdc, 0, 0, System.Convert.ToInt32(this.Width), System.Convert.ToInt32(this.Height), windowhdc, 0, 0, TernaryRasterOperations.SRCCOPY);

这样做:

IntPtr memdc = CreateCompatibleDC(windowhdc);
SelectObject(memdc, bmap);

BitBlt(memdc, 0, 0, System.Convert.ToInt32(this.Width), System.Convert.ToInt32(this.Height), windowhdc, 0, 0, TernaryRasterOperations.SRCCOPY);

不要忘记稍后删除 Memort DC:

DeleteDC(memdc);

顺便说一句,您不需要 image1.BeginInit();

还要检查一下,您不需要枚举所有窗口。请改用 user32.dll 中的 GetDesktopWindow 方法。

关于c# - WPF 图像不会显示 BitmapSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com