问题标签 [createdibsection]
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++ - 如何将像素数组转换为 HBITMAP
我有一个像素数组,我需要将其转换为 HBITMAP 以便在窗口中显示它。我尝试使用 CreateDIBitmap() 但我没有 BMP 标头。我尝试根据 MSDN 文档手动构建它们,但这不起作用。
这是我的代码的外观
现在我得到一个非 NULL hBitmap 这很好,但它总是显示黑色图像,好像它没有指向像素数组。我使用代码检查了它
实际上 qB.bmBits 是 NULL。有什么问题以及如何解决?
c++ - 在引擎盖下创建 DIBSection
我一直在使用WINAPI CreateDIBSection()
逐像素绘制,然后我将其 bitblt 到 DC。我很好奇。CreateDIBSection 的底层数据结构是怎么回事?BITMAPINFO 结构存储屏幕/客户端的宽度高度。然后是 VOID **ppvBits,处理 24 位颜色。那么这一切都可以看作是一个 3D 数组吗?与此类似
整数像素[高度][宽度][颜色]?
我问的原因是这个CreateDIBSection()
函数非常非常快,但是如果我创建一个类似的 (900*1800*(246*256*256)) 数组,它真的很慢。
微软是如何如此快速高效地获得这种方法的?我什么都试过了。Int*** 指向指针的指针,, int*** malloc
,尝试NEW
等,它们在大型数组上都非常慢。我只是好奇如何构建一个性能也很好的 3D 数组。有什么想法吗?
我需要一个大约 20000x1800x100000 的数组。CreateDIBSection()
快速存储,没有问题。但是标准的 C/C++ 动态数组呢?
我需要将CreateDIBSection()
andBITMAPINFO
中的内容存储在第二个数组中。
php - 在 dibs 支付的回调 url 文件中写什么?
我使用了使用 PHP 的重定向付款方式。任何人都可以帮助回调文件内容吗?
我不知道在callback.php
文件中定义什么。我无法从任何来源找到任何帮助。我已经在下面提到了关于 dibs
http://tech.dibspayment.com/DX/Hosted/Output_parameters/Return_pages回调的链接
windows - Windows 位图:BITMAPV5HEADER 和 BITMAPINFO 兼容?
从我观察到的文档中CreateDIBSection
CreateDIBSection
,将指向 a 的指针BITMAPINFO
作为第二个参数。
但是,我遇到了很多地方表明它可能被允许将指针传递给其他结构(特别是BITMAPV5HEADER
),包括
我觉得这很有意义(BITMAPV5HEADER
可以看作是BITMAPINFO
wrt 结构布局的“扩展版本”),但我找不到关于这个主题的官方文档。
任何人都可以确认传递 aBITMAPV5HEADER*
而不是 aBITMAPINFO
实际上是有效的并且可能提供一些文件吗?
winapi - 了解 GetDiBits。C++
MSDN说GetDiBits
在调用这个函数之前,不应该将使用的位图选入DC。但是根据我的经验(with BitBlt
),我知道除非选择位图,否则我无法绘制位图。
- 如何
GetDiBits
规避这一点?我可以只使用未选择的、新创建的位图作为该函数的参数吗? GetDiBits
以及CreateDibSection
返回一个数组。但 MSDN 谈到了第一个功能:“指定兼容位图的位”
我认为 DI 代表 DeviceIndependent。为什么会有矛盾?这意味着,根据 MSDN,
GetDiBits
只能与CreateCompatibleBitmap
(即 DD)一起使用?那我不能把这个数组发送到另一台机器上显示,对吧?- 这两个功能都使用一个hDC。如果
CreateDibSection
真的是独立的,为什么它需要一个hDC?所有需要的信息都通过 bitmapinfoheader 提供...
winapi - 我如何在 C++ 中的 32 位 HBITMAP 上使用 Fillrect 或 DrawText
我为我的所作所为感到抱歉。我编辑了。
我想在使用 CreateDIBSection 创建的 32 位 HBITMAP 上使用 Fillrect
但我无法使 rect 以我想要的颜色可见。(我在 32 位 HBITMAP(hdcbmp) 上使用 CreateSolidBrush blue(RGB(0, 0, 255)) 绘制了一个填充矩形,但它没有显示为蓝色。)
这是源代码
无论如何要显示我想要的矩形颜色吗?
对不起我糟糕的英语。
c++ - 从屏幕 HDC 保存像素
许多论坛提供以下代码,说明如何将屏幕像素的副本放入数组:
(链接)
但这实际上涉及将像素“内存”区域从屏幕 HDC 复制到内存中。为什么不这样:
上下文 HDC 已经包含所有数据。为什么我不能读它?
而且我认为必须将位图选择到 HDC 中,并且 HDC实际上承载数据。那么为什么CreateDIBSection
虽然位图还没有被选择到任何 HDC 中却返回一个指针呢?(如果它提供了一个指向作为参数传递的 HDC 内存的指针,则该数组已经包含屏幕的像素值,但情况并非如此,因为BitBlt
仍然需要。)
我得出这个结论是因为 BitBlt 接受 HDC 参数,而不是位图。这可能意味着它将数据复制到关联的 HDC。
c++ - CreateDIBSection 为同一图像返回不一致的位图位值
这是一个关于CreateDIBSection的扩展问题。
我用它来获取使用Direct3D绘制的同一幅图像的bitMap位值,以验证其Direct3D渲染的一致性,即只要我每次运行程序时获得相同的bitMap位值(绘制相同的图像),然后我认为 Direct3D 渲染通过了。
然而,奇怪的是,在运行程序的前 4 次(绘制相同的图像),第 5 次之后,我只能获得相同的位图位值(来自下面代码中所示的“图像”) ,bitMap 位值的结果会开始轻微变化(只有少量字节改变,其余大部分字节保持不变),永远不会取回与前 4 次相同的 bitMap 位值。
但是,一旦我重新启动计算机并再次开始运行我的程序,我又回到了相同的模式:我在运行程序的前 4 次中得到的 bitMap 位值与第一次试验完全相同,但以下运行将导致不同的位图位值。
我能想到的两个可能的原因:
GPU的渲染有一些轻微的不一致,意味着GPU可能存在一些缺陷,但我不是GPU专家,所以我真的没有信心以这种方式得出结论。
我知道 CreateDIBSection 将自行处理内存分配,是否有可能在调用 DeleteObject 后内存未正确清理并影响 bitMap 位值中的某些位?(我在这个讨论中遵循了释放内存的步骤,但这并不能帮助我获得相同图像的一致位图位值。)
问题:当我们从同一个图像中获取它时,我们如何每次都获得一致的位图位值(这可能吗?)?
谢谢。
代码: