问题标签 [dib]

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 投票
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 投票
2 回答
227 浏览

c++ - GetDiBits:BITMAPINFOHEADER 中传递的不同维度

根据我使用此功能的经验,我对 GetDiBits 有一些疑问。我错误地创建了一个两倍于我需要大小的位图:

我没有注意到,因为代码的下一部分有效。我在此位图的一半上 BitBlt 屏幕的一部分:

然后我得到对应的数组:

当我将所有这些数据发送到另一台计算机时,图像完全正确(没有黑色边缘,因为它会在发送过大位图的情况下出现)。这意味着 GetDiBits 会忽略位图的正确大小并使用 BITMAPINFOHEADER 中提供的大小,而不会崩溃。(我用的是Win10。)

这是正常的吗?因为我不想通过网络发送不需要的字节,所以我不得不问:GetDiBits 是否输出正确尺寸大小的数组: (4*radius^2)*3 或者它是否关注结构中的值:半径^2 *3 -忽略填充-?

0 投票
1 回答
379 浏览

vb.net - VB.NET 在图片框中绘制与设备无关的位图

我的程序陷入了死胡同。我在内存中有一个由 DIB 位图(否BITMAPFILEHEADER)的 RGB 值组成的简单数组。该数组是在 C++ 中生成的,但我尝试在 VB.NET 中显示它。我不想使用 GDI+,因为我需要原始速度。

这是我的代码(文件中的图像没有标题,宽度:1920 和高度:100,24 位,总大小 6220804):

这是我的结构:

我测试了几乎所有可能的变量组合、HDC 和图形。没有任何作用!我哪里失败了?

注意:StretchDIBits 和 BitBlt 似乎成功了

0 投票
0 回答
82 浏览

java - Java:导出 Microsoft Access 数据库中 OLE 列中包含的与设备无关的位图流

我是一名 Java 开发人员,我正在尝试导出 Microsoft Access 数据库中包含的图像。

图像对象存储在我设法读取的 OLE 列中,但由于图像是从剪贴板粘贴到表格中的,因此内容有点奇怪。我导出的结果是下面的二进制流,我不知道如何从中获取图像。

来自记事本++十六进制编辑器的打印屏幕

0 投票
0 回答
38 浏览

alpha - DIB 使用 alpha 混合绘制重叠圆圈

这将是我在这里的第一个问题,我试图查看建议列表,但找不到与我的问题相匹配的问题。因此,我们开始了。

我正在尝试复制我看到的效果,我不知道我这样做的方式是否正确。因此,如果您对我应该如何进行操作有任何建议,我将非常感谢您的意见。(我只会做软件渲染)

(这是使用抖动完成的)

想要的结果

事实上,我目前离我想结束的地方还很远。但我对编码本身并不陌生,我只是很久没有做这种图形了。

所以,我的做事方式最初是用 alpha 混合画一些圆圈。后来我想通过在我去的圆圈上向白色移动来实现发光效果,这与我在这里使用 alpha 的方式几乎相同。

代码如下。

我正在画一个圆圈,我使用半径作为 alpha 的度量。但结果不是我所期望的(黄色圆圈展示了它看起来没有重叠;

我的结果

正如你所看到的,颜色混合在一起,形成了一个非常纯正的红色,边缘没有 alpha 混合。

我不知道为什么,你呢?谢谢你。

编辑:我修复了它,目标像素格式不是 ABGR 而是 ARGB,正如宏所说,我也从源像素切换了它。我可能是昨晚太累了。

0 投票
1 回答
171 浏览

vb.net - 如何将“System.Drawing.Image”带到 DIB

我创建了一个可消耗的 COM 类库。

类库获取相机的图像。它是图像/位图类型。

我在 VB6 中使用类库,我需要在 VB6 中显示此图像。

如何将此 System.Drawing.Image 转换为 VB6 可以显示的内容?

我可以使用 DIB(使用 CreateDIBSection 等)吗?

如果是,如何将 System.Drawing.Image 转换为 DIB?

谢谢!

0 投票
0 回答
63 浏览

mfc - MFC 对话框显示 8 位缓冲区

在我的 MFC 对话框中添加了图片控件。将其类型设置为 Frame。需要在图片控件上显示 8 位缓冲区(未从文件加载)。图像按比例缩小、重复、对角倾斜。不正确。我无法让它正确地适合控件。调整了控件的大小,但仍然是同样的问题。

0 投票
0 回答
79 浏览

c# - Graphics.DrawImage 可以绘制 YV12 DIB 吗?

我继承了一个 C# .Net Windows Forms 项目,该项目从托管的预编译 DLL 接收设备独立位图(作为字节数组)。C# 代码从 DIB 创建一个虚拟 BMP 文件,以便它可以创建一个位图,然后可以使用 System.Drawing.Graphics.DrawImage 绘制该位图。

这适用于 DIB 包含未压缩的像素数据但在某些硬件上,像素数据为 YV12 格式并且 Image.FromStream 引发 System.ArgumentException 我认为表明底层代码(GDI+?)认为 BMP 无效或不支持的格式。

在这种情况下,DIB 的 BITMAPINFOHEADER(前 40 个字节)具有以下值:

  1. BMP格式甚至支持YV12吗?我在网上找不到任何示例图像。

  2. 是否有不同的方式来处理 DIB 以使其适用于 DrawImage?上面的代码似乎跳过了箍。

0 投票
1 回答
97 浏览

c++ - 如何创建 DIB、设置位并附加到 CImageList

我正在尝试创建一个与设备无关的位图,以编程方式设置像素(而不是从资源或磁盘加载)并将 DIB 附加到 CImageList 以在 CComboBoxEx 控件中使用。我相信 DIB 已成功创建并且位设置正确,但组合框中显示的图像全为黑色。

我创建 CImageList,绘制位图并将列表附加到此处的控件:

绘制位图 (DrawImage) 的函数在此处(此处简化为仅将所有像素设置为红色):

我猜问题出在将DIB附加到CBitmap然后将其插入CImageList的代码中的某个地方,但是我一直找不到任何示例代码来执行此操作,尽管从表面上看,代码对我来说是合理的。不幸的是,CBitmap 和 CImageList 都在 afxwin.h 中定义,因此很难/不可能调试该部分代码中实际发生的情况,但 CBitmap.Attach 和 CImage.Add 不会返回错误。

0 投票
0 回答
161 浏览

asp.net-core-3.1 - 如何在 .NET Core 3.1 中将 DIB 转换为位图?

如何在 C# ASP.NET Core 3.1 中正确检索设备独立位图(DIB)指针作为位图?

问题:当我尝试从 Dib 指针保存位图时,我收到System.AccessViolationException: 'Attempted to read or write protected memory。这通常表明其他内存”

我正在使用以下构造函数 Bitmap(Int32, Int32, Int32, PixelFormat, IntPtr)并假设最终参数可以使用 DIB 指针。

使用以下语法:

我假设问题在于步幅和/或像素格式的计算。我不确定如何从BITMAPINFOHEADER确定PixelFormat