问题标签 [bitblt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 使用 BitBlt 捕获桌面像素颜色
现在我正在使用 GetPixel() 从桌面检索大约 64 个像素以获得它们的颜色。我读到 GetPixel() 很慢,但认为这对几个像素无关紧要,但每次运行例程都需要 1.5 秒。在做了一些研究之后,我得出的结论是 bitblt 似乎是我正在寻找的东西。我想要做的是抓取桌面的定义区域(包括所有窗口),然后在给定的偏移量处抓取像素颜色。这就是我现在正在做的事情:
}
我找到了大量的教程和文档,但是对于 Windows API 来说太新了,它们对我来说并没有做太多。谢谢!
gdi+ - 是否可以直接在 GDI+ 位图上进行 BitBlt?
我正在尝试将 BitBlt 从 HBITMAP 转换为 GDI+ 位图。我试过这个,但没有任何反应:
编辑:显然,如果我获得了 hDC,然后再将它与 BitBlt 一起使用,它就无法工作。我需要确保 hDC 仍然有效。这是解决方案:
有谁知道为什么这个改变是必要的?为什么使用第一个示例中较早获得的 hDC 可能不起作用?
winapi - 是否可以直接从 GDI+ 位图 BitBlt?
是否可以使用 BitBlt 直接从 GDI+ 位图中复制而不使用 GetHBitmap?
GetHBitmap 很慢,因为它制作了整个图像的新副本,除了 BitBlt 副本之外并且比 BitBlt 副本慢,并且必须释放给定的 HBITMAP。图像很大。
有没有办法让 BitBlt 使用原始 GDI+ 图像的像素数据?
编辑: 我可以获得指向 GDI+ 位图像素数据在内存中的位置的指针。我可以创建一个指向 GDI+ 位图像素数据的 HBITMAP 以避免额外的副本,以及由此产生的 BitBlt 吗?
c# - 如何让 bitblt 复制子控件而不将子控件绘制到屏幕上?
这是我的问题的简短之处:在自定义控件中,有没有办法将其子控件的父绘制/bitblt 获取到背景图像,但不让子控件实际绘制在控件上?
详细信息:
我正在尝试推出自己的双缓冲(在紧凑框架上)并且遇到了很多问题。我有一个相当复杂的用户控件。它有一个Panel
带有滚动Panel
(可变大小)的视图(固定大小)。卷轴Panel
上有几张卡片Panels
。卡片面板垂直堆叠包含两个DataGrids
和两个Labels
。
这是我的控件的视觉轮廓
好的,那么现在解决问题。我覆盖滚动面板的 on paint 并执行 bitblt 以获取图像以显示为“自定义绘画”。我通过保存它来测试图像,这正是我想要的。
问题是数据网格和标签仍然可以正常绘制。因此,当我滚动时,会留下文物。所以,我重写了 OnPaint 对网格和标签什么都不做。但是当我这样做时,bitblt 不再拾取网格(但奇怪的是它仍然拾取标签)。
那么,在自定义控件中,有没有办法让父控件将其子控件绘制/bitblt 到背景图像,但不让子控件实际绘制在控件上?
注意:如果您有兴趣查看我的完整代码,可以在此处查看。
c# - BitBtl 和 DWM 的问题 (Windows Aero)
我正在开发一个必须截取全屏游戏截图的应用程序。问题是我尝试了很多方法,但是当游戏处于全屏模式时,它们中的任何一个都能够截取屏幕截图,它只会截取游戏下方的内容和左上角的黑色矩形。
有没有其他不涉及挂钩的方法来实现这个目标?因为我正在使用 C#,这是一种糟糕的语言来制作这种东西。
这是我现在的代码:
这在 XP 上可以正常工作,但是在 Vista / 7 上,我需要禁用 Aero 才能使此代码正常工作,或者它只会截取我之前所说的游戏内容的屏幕截图。
c - 为什么没有使用 SelectObject 和 BitBlt 函数将屏幕截图绘制到我的窗口上?
我正在尝试从屏幕的 0x0(左上角)位置获取 500x500 的屏幕截图并将其放在窗口中。
这是我的代码(hwnd
是我的窗口句柄):
我在这里想念什么?我在窗口内变黑而不是屏幕截图。
编辑
在我更改memoryDc
为dc
之前它之后它可以工作BitBlt(appDc, 0, 0, 500, 500, memoryDc, 0, 0, SRCCOPY);
但现在问题是 SelectObject 不起作用。我的意思是它没有将图像放在 HBITMAP 中。但是 BitBlt 正在从复制dc
到appDc
windows - 为什么 Bitblt 不能工作
为什么文本不能在窗口显示?
c# - 将图形内容复制到位图
我尝试将图形对象的内容复制到位图。我正在使用此代码
如果我使用这样的方法
位图包含内容。但是,如果我在调用方法之前绘制图形对象,则位图是空白的:
为什么它在第一种情况下有效,而在后一种情况下无效?
c++ - 控件在窗口中绘制 gdi
我过去(很久以前)使用过 Visual Basic 6,它有一个名为 PictureBox 的控件,您可以在其中绘制东西,如果需要,可以获取设备上下文等。我现在正试图找出如何拥有纯 GDI/WinApi(无 MFC、.net、atl、gdi+ 等)中的类似“控件”。我使用的是所有者绘制的按钮控件,但是当它被点击时你不能(容易地)获得鼠标坐标,所以我想我需要一些其他的控件。我尝试了一个静态控件,但那个控件没有所有者绘制支持。我尝试处理 WM_PAINT,但据我所知(在谷歌搜索数小时后),无法使用它来更新客户端的一个区域或单个 HWND。
所以,我要问的是,人们如何使用纯 GDI 和 Windows API 对窗口的选定区域(无论是控件还是其他)进行动画处理或 blit?我知道 MFC 有一种称为子类化的东西,但由于 MFC 只是 Windows API 的包装器,因此必须有一种方法可以在没有它的情况下做到这一点(正如我之前所说,MFC 不是一个选项)。
visual-c++ - 如何加快 BitBlt 以使用 aero 捕获屏幕?
我使用以下代码通过 GDI 函数捕获屏幕:
问题是:当 Aero 打开时, BitBlt功能非常慢 - 它需要将近 50 毫秒(这对我来说是不可接受的,因为我需要在一秒钟内捕获多次)。
BitBlt 直接从视频硬件获取像素数据。但是显卡在我的测试机器(即 Radeon 5470 和 Radeon 4850)中相当不错,所以我不明白哪里出了问题。我知道这些卡片(任何现代卡片)在 2D 中不如在 3D 中那么好,但我认为简单的 blit 操作不应该花费 50 毫秒。
所以,你能建议怎么做吗?在我的情况下,任何类型的“hackish”解决方案(只要它可以稳定工作)都可以。
目标系统是 Win7 x64,32 位代码。
提前致谢!