问题标签 [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++ - 关于 GetDIBits 和设备上下文的奇怪错误
今天遇到一个很奇怪的问题。在带有MFC项目的VC6上运行以下代码,它是黑屏,如果我拿出评论,它可以完美运行并显示桌面图片。但是这些代码是在无限循环中执行的,所以我尝试减少内存复制和内存消耗等BitBlt
。CreateCompatibleBitmap
我不明白我的程序与这些注释代码有什么关系。任何人都知道导致问题的原因和原因?
winapi - 了解 GetDiBits。C++
MSDN说GetDiBits
在调用这个函数之前,不应该将使用的位图选入DC。但是根据我的经验(with BitBlt
),我知道除非选择位图,否则我无法绘制位图。
- 如何
GetDiBits
规避这一点?我可以只使用未选择的、新创建的位图作为该函数的参数吗? GetDiBits
以及CreateDibSection
返回一个数组。但 MSDN 谈到了第一个功能:“指定兼容位图的位”
我认为 DI 代表 DeviceIndependent。为什么会有矛盾?这意味着,根据 MSDN,
GetDiBits
只能与CreateCompatibleBitmap
(即 DD)一起使用?那我不能把这个数组发送到另一台机器上显示,对吧?- 这两个功能都使用一个hDC。如果
CreateDibSection
真的是独立的,为什么它需要一个hDC?所有需要的信息都通过 bitmapinfoheader 提供...
c++ - GetDiBits:BITMAPINFOHEADER 中传递的不同维度
根据我使用此功能的经验,我对 GetDiBits 有一些疑问。我错误地创建了一个两倍于我需要大小的位图:
我没有注意到,因为代码的下一部分有效。我在此位图的一半上 BitBlt 屏幕的一部分:
然后我得到对应的数组:
当我将所有这些数据发送到另一台计算机时,图像完全正确(没有黑色边缘,因为它会在发送过大位图的情况下出现)。这意味着 GetDiBits 会忽略位图的正确大小并使用 BITMAPINFOHEADER 中提供的大小,而不会崩溃。(我用的是Win10。)
这是正常的吗?因为我不想通过网络发送不需要的字节,所以我不得不问:GetDiBits 是否输出正确尺寸大小的数组: (4*radius^2)*3 或者它是否关注结构中的值:半径^2 *3 -忽略填充-?
c# - DrawIconEx 和 GetDIBits 的奇怪行为,alpha 为零
我正在使用此代码来捕获屏幕+光标:
由于某种原因,当光标是工字梁(文本光标)时,它应该位于的图像区域全是透明的。RGB 信息在那里,但 alpha 位是0
.
(右图是手动将所有像素 alpha 位设置为 255 后帧的样子)。
如果光标是箭头,则正常工作。
但是,如果我Bitmap
从句柄中获取然后保存到磁盘,则图像没有透明孔,正如预期的那样。
这是怎么回事?是 withDrawIconEx
还是 with FromHbitmap
?
也许FromHbitmap
总是将所有像素的 alpha 设置为 255?也许GetDiBits
以不同的方式合并两个图像(屏幕截图+光标)?
编辑
作为快速修复,我知道我可以检测光标是否为 I-Beam(蒙版单色类型)并在保存像素阵列时手动修复它。
和:
c++ - GetDIBits 在屏幕捕获函数中多次迭代后返回零
我正在使用此代码来捕获屏幕和光标。
屏幕截图完美运行,但在屏幕截图超过 8 分 30 秒后总是失败。8 分 30 秒后 GetDIBits 开始返回 0 。我在装有 Windows 10 专业版的 64 位机器上运行它。如果我删除光标捕获代码,此问题似乎不会出现。
c++ - GetDIBits 返回所有值为 0 的数组
我需要在屏幕上找到一些图像。我决定做一个简单的比较循环。
我发现这个答案似乎很有帮助并编写了下一个代码:
两个问题:
- 我的屏幕分辨率是 1280x800=1 024 000 px,
MyBMInfo.bmiHeader.biSizeImage
等于 4 096 000。是 rgb a还是什么? - 主要问题:虽然没有错误,而且我在上一个问题中提到的值不是零,但是在代码底部的循环中,所有的值
lpPixels
都是零,我没有得到任何输出。为什么?