问题标签 [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.

0 投票
3 回答
9227 浏览

c++ - 如何将像素数组转换为 HBITMAP

我有一个像素数组,我需要将其转换为 HBITMAP 以便在窗口中显示它。我尝试使用 CreateDIBitmap() 但我没有 BMP 标头。我尝试根据 MSDN 文档手动构建它们,但这不起作用。

这是我的代码的外观

现在我得到一个非 NULL hBitmap 这很好,但它总是显示黑色图像,好像它没有指向像素数组。我使用代码检查了它

实际上 qB.bmBits 是 NULL。有什么问题以及如何解决?

0 投票
0 回答
1161 浏览

c# - 使用 CreateDIBSection 时的 C# 类型转换

首先,请阅读链接

要在 c# 中使用 CreateDIBSection,我是这样定义的。

而且我还定义了结构类型,就像我从Link中学到的 那样

一个问题与我定义的 MYBITMAPINFO 有关。

当我调用 CreateDIBSection 函数时,MYBITMAPINFO 被转换为 BITMAPINFO 类型,如下所示 [LINK_1]

但是我不知道如何编写与上述代码相同的 C# 代码。(从 MYBITMAPINFO 到 BITMAPINFO 的类型转换)

感谢您的阅读。

0 投票
1 回答
1146 浏览

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中的内容存储在第二个数组中。

0 投票
1 回答
736 浏览

php - 在 dibs 支付的回调 url 文件中写什么?

我使用了使用 PHP 的重定向付款方式。任何人都可以帮助回调文件内容吗?

我不知道在callback.php文件中定义什么。我无法从任何来源找到任何帮助。我已经在下面提到了关于 dibs http://tech.dibspayment.com/DX/Hosted/Output_parameters/Return_pages回调的链接

0 投票
1 回答
694 浏览

windows - Windows 位图:BITMAPV5HEADER 和 BITMAPINFO 兼容?

从我观察到的文档中CreateDIBSectionCreateDIBSection,将指向 a 的指针BITMAPINFO作为第二个参数。

但是,我遇到了很多地方表明它可能被允许将指针传递给其他结构(特别是BITMAPV5HEADER),包括

我觉得这很有意义(BITMAPV5HEADER可以看作是BITMAPINFOwrt 结构布局的“扩展版本”),但我找不到关于这个主题的官方文档。

任何人都可以确认传递 aBITMAPV5HEADER*而不是 aBITMAPINFO实际上是有效的并且可能提供一些文件吗?

0 投票
1 回答
568 浏览

winapi - 了解 GetDiBits。C++

MSDN说GetDiBits在调用这个函数之前,不应该将使用的位图选入DC。但是根据我的经验(with BitBlt),我知道除非选择位图,否则我无法绘制位图。

  1. 如何GetDiBits规避这一点?我可以只使用未选择的、新创建的位图作为该函数的参数吗?
  2. GetDiBits以及CreateDibSection返回一个数组。但 MSDN 谈到了第一个功能:

    “指定兼容位图的位”

    我认为 DI 代表 DeviceIndependent。为什么会有矛盾?这意味着,根据 MSDN,GetDiBits只能与CreateCompatibleBitmap(即 DD)一起使用?那我不能把这个数组发送到另一台机器上显示,对吧?

  3. 这两个功能都使用一个hDC。如果CreateDibSection真的是独立的,为什么它需要一个hDC?所有需要的信息都通过 bitmapinfoheader 提供...
0 投票
1 回答
399 浏览

winapi - 我如何在 C++ 中的 32 位 HBITMAP 上使用 Fillrect 或 DrawText

我为我的所作所为感到抱歉。我编辑了。

我想在使用 CreateDIBSection 创建的 32 位 HBITMAP 上使用 Fillrect

但我无法使 rect 以我想要的颜色可见。(我在 32 位 HBITMAP(hdcbmp) 上使用 CreateSolidBrush blue(RGB(0, 0, 255)) 绘制了一个填充矩形,但它没有显示为蓝色。)

这是源代码

无论如何要显示我想要的矩形颜色吗?

对不起我糟糕的英语。

0 投票
1 回答
149 浏览

c++ - 从屏幕 HDC 保存像素

许多论坛提供以下代码,说明如何将屏幕像素的副本放入数组:

链接

但这实际上涉及将像素“内存”区域从屏幕 HDC 复制到内存中。为什么不这样:

上下文 HDC 已经包含所有数据。为什么我不能读它?

而且我认为必须将位图选择到 HDC 中,并且 HDC实际上承载数据。那么为什么CreateDIBSection虽然位图还没有被选择到任何 HDC 中却返回一个指针呢?(如果它提供了一个指向作为参数传递的 HDC 内存的指针,则该数组已经包含屏幕的像素值,但情况并非如此,因为BitBlt仍然需要。)

我得出这个结论是因为 BitBlt 接受 HDC 参数,而不是位图。这可能意味着它将数据复制到关联的 HDC。

0 投票
1 回答
141 浏览

c++ - CreateDIBSection 为同一图像返回不一致的位图位值

这是一个关于CreateDIBSection的扩展问题。

我用它来获取使用Direct3D绘制的同一幅图像的bitMap位值,以验证其Direct3D渲染的一致性,即只要我每次运行程序时获得相同的bitMap位值(绘制相同的图像),然后我认为 Direct3D 渲染通过了。

然而,奇怪的是,在运行程序的前 4 次(绘制相同的图像),第 5 次之后,我只能获得相同的位图位值(来自下面代码中所示的“图像”) ,bitMap 位值的结果会开始轻微变化(只有少量字节改变,其余大部分字节保持不变),永远不会取回与前 4 次相同的 bitMap 位值。

但是,一旦我重新启动计算机并再次开始运行我的程序,我又回到了相同的模式:我在运行程序的前 4 次中得到的 bitMap 位值与第一次试验完全相同,但以下运行将导致不同的位图位值。

我能想到的两个可能的原因:

  1. GPU的渲染有一些轻微的不一致,意味着GPU可能存在一些缺陷,但我不是GPU专家,所以我真的没有信心以这种方式得出结论。

  2. 我知道 CreateDIBSection 将自行处理内存分配,是否有可能在调用 DeleteObject 后内存未正确清理并影响 bitMap 位值中的某些位?(我在这个讨论中遵循了释放内存的步骤,但这并不能帮助我获得相同图像的一致位图位值。)

问题:当我们从同一个图像中获取它时,我们如何每次都获得一致的位图位值(这可能吗?)?

谢谢。

代码: