问题标签 [getdibits]
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 捕获程序窗口总是返回相同的图像
我编写了以下代码(C++ Win32)来捕获游戏窗口屏幕并从图像中获取像素颜色数组。函数 autoB() 完成了这项工作。
然后我将结果数组绘制到我的窗口中,以直观地检查我得到了什么。
问题是这个程序在我启动计算机后只运行一次,在它第一次“缓存”从游戏中截取的第一个屏幕截图之后,我总是得到相同的像素数组。即使我关闭并重新启动程序,我也会得到相同的屏幕截图。
游戏没有使用 DirectX 在屏幕上绘图,我总是可以使用 Alt+PrtSc 截取屏幕截图。
任何有助于理解为什么会以这种方式发生的帮助表示赞赏。
更改屏幕截图的唯一方法是重新启动游戏。然后,第一个屏幕截图被捕获,无论游戏窗口中发生什么,都会一遍又一遍地显示。
c - hwnd 到 ppm 问题
我有一个将 hwnd 保存到 ppm 文件中的功能。这个函数的灵感来自一个 msdn 示例。msdn 示例和我的函数都可以工作,但是......我有一个问题......
但首先,这是功能。
所以这是生成的图像:
http://imageshack.us/photo/my-images/853/test2ne.jpg/
如您所见,宽度大小存在问题。也许是因为窗口的边框?如果在代码中,我更改“w = rc.right - rc.left;” 变成“w = rc.right - rc.left - 10;”,这样更好。但我不明白为什么我必须放“-10”并且......图片右侧缺少一些像素(可能是10像素?)
http://imageshack.us/photo/my-images/207/test3jq.jpg
最后一个问题:有什么方法可以要求 GetDIBits 函数将我的字节倒序排列?我不想逐个像素地复制,因为它会花费一些 cpu 时间。(好吧,你可能会说,既然我将这个文件保存到磁盘,那么我不应该担心cpu时间,但我的目标不是将这张图片保存到磁盘。我这样做只是为了调试)
提前感谢您的帮助
c - 位图反转颜色
前段时间我问了一个关于将 hwnd 保存到 ppm 文件中的问题。感谢stackoverflow用户,我解决了我的问题。我的工作正常,但我仍然有一个问题:红色和蓝色是颠倒的。
代码和我之前的问题在这里: hwnd to ppm issue
这是位图信息数据:
我用谷歌搜索,似乎问题是 BI_RGB,我应该使用 BI_BITFIELDS ...但我没有找到有关如何使用它的文档。而且我真的不想逐像素读取所有数据以恢复蓝色和红色。有没有办法在不逐个像素的情况下完成它?
在此先感谢您的帮助
c++ - 使用 GetDIBits() 时遇到问题
以下使用 GetDIBits() 的代码没有给我想要的输出:
(gBit.bmp 是一个 1366x768 的位图,完全是白色的。)
我是 C++ 新手,几乎不知道如何使用这个函数。对于所有大于或等于 0 且小于或等于 3*1366 的 i,我期望 p[i] 为 255,因为 gBit 的每个像素都是白色的,但正在显示随机值,其中大部分为 0。我没有正确使用此功能还是其他地方的错误?
编辑:GetDIBits() 似乎无法将像素数据保存在 p 中,因为当我删除包含 GetDIBits() 的行时会返回相同的值。这次我没有选择 hBit 进入 DC。还有什么问题?
c++ - GetDIBits() 返回错误的 BGR 值:
GetDIBits() 没有将正确的 BGR 值传递给 COLORREF 数组:
bitmap.bmp 是一个完全蓝色的 (RGB(0,0,255)) 10x10 24 位位图文件。输出的前几行如下所示:
0 0 255
255 0 0
0 255 0
0 0 255
改变的不仅仅是值的顺序;有些颜色值不应该是 0。最后几个 COLORREF 值是 RGB(0,0,0)。代码可能有什么问题?
c++ - 获取最小化窗口的 RGB 数据
我想获取最小化的运行窗口的特定部分的 RGB 数据,但我不太确定该怎么做。这是我的一段代码,用于获取指定矩形的窗口的位图信息。
但是,只有当没有另一个窗口与我有句柄的窗口重叠时,此功能才会起作用。
hwnd - 我的窗口的句柄 LoadBMPFromHandle 必须检索具有左上角坐标(leftTopX,leftTopY)和尺寸宽度 x 高度的矩形的 BGR(蓝绿红)数据。
谢谢你!
c++ - 使用 GetDIBits 加载位图
我想用GetDIBits
C++ 加载位图。这是我正在使用的代码:
但这似乎bits
是NULL
出于某种原因。我的代码有问题吗?我以前用过GetBitmapBits
,bits
那时候没有NULL
。
c++ - c++ 使用 GetDIBits() 读取像素
我正在尝试创建一个等效于 windows API GetPixel() 函数的函数,但我想创建我的屏幕的位图,然后读取该缓冲区。
这就是我所得到的(主要是从谷歌搜索中复制粘贴),当我运行它时它只打印出 0。我想我大部分都做对了,我的问题是我不知道如何读取 BYTE 变量。
所以我的问题是,我需要做什么才能让它用我的 for 循环打印出一些随机颜色(R、G 或 B)?
- Windows 7的
- C::B 13.12(控制台应用程序)
- 编译器:mingw32-gcc
- 库 gdi32 链接
c++ - GetDIBits 将图像缓冲区设置为全 0(全黑)
试图将窗口的屏幕截图作为位图。下面的代码正在创建一个适当大小的位图,但每个像素都是黑色的。换句话说,GetDIBits 将 imageBuffer 设置为全 0。
发布的代码为每个在屏幕上打开和可见的记事本保存一个位图。没有一个断言失败。
BITMAPFILEHEADER 和对文件的实际写入被省略了,因为带有断言的最终 for 循环显示 GetDIBits 将 imageBuffer 设置为全 0,因此在此之后无需检查代码。
(在可执行文件的属性中,在配置属性->常规下,我将字符集设置为“未设置”以避免 unicode 必需品。)
delphi - 为什么在 Win64 上调用 GetDIBits 失败?
我有一个电话,GetDIBits
它在 32 位上完美运行,但在 64 位上失败。尽管句柄的值不同,但bitmapinfo
结构的内容是相同的。
这是我可以想出的最小(至少稍微结构化)代码示例来重现错误。我使用Delphi 10 Seattle Update 1进行了测试,但即使使用其他 Delphi 版本,该错误似乎也会发生。