问题标签 [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 投票
2 回答
693 浏览

c++ - Win API 中的内存 DC 有多便宜/多贵?

我正在开发一个程序,该程序将具有许多 DIB 位图(由 创建CreateDIBSection),并且必须使用 Win API 在它们上绘制大量文本。

为了在位图上绘图,Windows 需要设备上下文,由CreateCompatibleDC.

现在这里有两种方法:

  1. 我可以为每个位图创建一次 DC,将其用于绘图并在释放位图时将其删除。

  2. 或者我只能在需要绘制位图、调用绘制函数并删除 DC 时创建 DC。

更好的方法是什么?我更喜欢第一个,因为调用更少 - 这将使我的代码更小,也更快一点。

但是为每个位图保存一个长寿命的 DC 是不是太昂贵了?

编辑1:该应用程序实际上是一个 GUI 工具包库,将来可以以不同且不可预测的方式使用,因此我需要一个平衡的决策,以尽可能提高性能和最少的系统资源使用。

0 投票
1 回答
467 浏览

c++ - 从打包的 DIB 空指针复制

我正在开发一个用 C++ 编写的用于缓存 GDI 对象的 API,我在其中实现了模仿 win32 API 的不同 Create 方法。一种这样的方法是CreateDIBPatternBrushPt(),它将 a 接收VOID*到打包的 DIB 中。VOID*包含一个结构,BITMAPINFO后面紧跟一个定义位图像素的字节数组。我对打包的 DIB 进行了一些研究。根据这本书,Programming Windows 以及 Wikipedia,长度等于行长度和biHeight(的成员BITMAPINFOHEADER)的乘积,其中:

所以,目前我的想法是做这样的事情:

这似乎是一种有效的方法吗?我还想知道lpPackedDIB使用 的人会从哪里来CreateDIBPatternBrushPt(),以便我可以正确测试这个逻辑。

编辑:

参考资料: https ://msdn.microsoft.com/en-us/library/windows/desktop/dd183493(v=vs.85).aspx https://en.wikipedia.org/wiki/BMP_file_format#File_structure https:// /www-user.tu-chemnitz.de/~heha/petzold/ch15b.htm(特别是“DIB 像素位”部分)

0 投票
1 回答
709 浏览

ffmpeg - 将 rtsp 流转换为 bmp 图像

我有一个要求,我必须将 RTSP 视频流转换为 BMP 图像,然后传递给我的人脸检测应用程序。那么是否可以使用 ffmpeg 工具来做同样的事情呢?如果没有,那么任何人都可以指导我使用正确的工具/一些相同的自定义代码。

提前致谢!!

0 投票
2 回答
1972 浏览

c - 从 Windows 剪贴板获取 32 位 RGBA 图像

我希望我的应用程序(适用于 RGBA8888 图像)能够从 Windows 剪贴板粘贴图像。所以它应该能够从剪贴板上读取来自任何常见光栅图像应用程序(如 Gimp、Photoshop、MSPaint 等)的图像。

通过阅读剪贴板功能,看来我应该可以调用GetClipboardData(CF_DIBV5)几乎可以访问剪贴板上的任何位图类型,因为 Windows 会自动在它与 CF_BITMAP 和 CF_DIB 之间进行转换。但是通过阅读 DIB 格式,我发现位深度、RGB 顺序、可选压缩等的可能组合有很多。看起来我正在做的事情将是一项常见的任务,但我没有在 Windows API 中看不到任何转换函数(除非我不擅长搜索),这似乎需要一周的时间来编写以支持所有可能的格式。所以我想知道我是否忽略了一些明显的事情。或者,如果我可以做出某种假设来简化这一点……例如,如果所有流行的图像应用程序碰巧以未压缩/未索引的格式将图像复制到剪贴板。

更新:这是我到目前为止所拥有的:

更新 2:

澄清一下,我需要字面上未压缩的 32 位图像数据 (RRGGBBAA),我可以在跨平台应用程序中进行操作,但我喜欢它。我不需要使用 Windows API 来将此图像绘制到屏幕上。

我知道一个名为的第三方库stdb_image.h可以将 .bmps、.jpgs 和 .pngs 加载到我需要的数据类型中。因此,如果有一种方法可以将剪贴板数据转换为位图或 png 文件数据而不会丢失 alpha,那么我的状态会很好。

0 投票
2 回答
483 浏览

delphi - How to save Windows.tagBitmap to stream as a full DIB?

from a third party component I am receiving a PBitmap which is a pointer to Windows.tagBitmap record.

I would like to convert data contained in this pointer to a regular DIB and save this data to a stream. Just as Graphics.TBitmap.SaveToStream does. So preferably I would like to have a procedure like:

I've tried to find information about this structure on MSDN, but none of the headers described there (BITMAPFILEHEADER, BITMAPINFOHEADER etc.) seems to conform tagBITMAP.

Could someone experienced in the matter could help me?

edited: An example in in C \ C++ would also be fine for me.

0 投票
1 回答
616 浏览

windows - 如何从剪贴板内存 (uintptr) 中检索图像数据缓冲区?

我正在尝试使用带有 user32.dll 的系统调用来获取剪贴板的内容。我希望它是来自打印屏幕的图像数据。

现在我有这个:

我需要使用句柄将数据放入可读缓冲区。

我从 github 上的 AllenDang/w32 和 atotto/clipboard 获得了一些灵感。根据 atotto 的实现,以下内容适用于文本:

但是我怎样才能得到一个包含我可以解码的图像数据的缓冲区呢?

[更新]

按照@kostix 提供的解决方案,我编写了一个半工作示例:

AllenDang/w32 包含您需要的大部分内容,但有时您需要自己实现一些东西,例如 globalSize():

也许有人会想出一个解决方案来获取 BMP 数据。与此同时,我将采取不同的路线。

0 投票
1 回答
379 浏览

python - python BMP/DIB字节槽,压缩槽

0 投票
2 回答
1060 浏览

c++ - SetDIBitsToDevice 仿真

我是 DxWnd 工具的作者,该工具试图为在现代 Windows 环境中运行旧程序和遗留程序提供支持。

一个非常奇怪的游戏是 G-Nome,尽管它能够在 Win7-10 系统上原生运行,但给图形处理带来了严重的问题。

游戏链接到 ddraw,但将每一帧构建为DIB,并使用user32 调用DIB_PAL_COLORS将 DIB 带到屏幕上。SetDIBitsToDevice视频上的 DC 类型也支持该操作,也支持OBJ_DC32 位色深视频模式,但在应用于 MEM_DC 类型 DC 时会产生不良颜色。我在尝试使用像这样的典型模式扩展 DIB 时发现了这一点(为简洁起见,去掉了变量声明和错误检查):

根据 MSDN,当您输出DIB_PAL_COLORSDIB 时,像素被映射到“当前”实现的调色板,但当然在 32 位表面和其内存 DC 克隆上根本没有调色板,所以难怪像素颜色看起来都错了。

另一种解决方案可能是模拟SetDIBitsToDevice构建 32 位内存 DC 的行为,然后随意缩放StretchBlt,但同样没有记录我如何将 8bpp DIB_PAL_COLORSDIB 转换为 32bppDIB_RGB_DIB或 32bpp DC。

我已经尝试了几种方法,但在所有情况下,我似乎都无法识别用于转换像素索引的正确调色板。有人可以帮我解释 8bpp DIB_PAL_COLORSDIB 格式吗?

0 投票
0 回答
50 浏览

python - 带有 glob 的 Dlib 收集点

我是 python 新手,现在我正在尝试使用 dlib C++ 库收集点的坐标。但我无法理解这段代码。请帮我

0 投票
2 回答
2761 浏览

windows - 修改 BMP 调色板并保存为正确格式

一个旧的废弃软件游戏使用图像的调色板作为游戏的调色板 https://ufile.io/su465 <- 这是所说的文件

Windows 10 不会将其识别为具有文件类型,但使用在线文件类型检查器表明它是具有 DIB 文件头的 Windows 3.x BMP 文件。我会很感激帮助我弄清楚如何修改这个文件的调色板并能够以(相同)正确的格式保存它,以便游戏仍然可以读取它。

初步实验表明,它可以用 GIMP 之类的编辑器打开,更改调色板,并保存为 .bmp 图像,但我找不到任何生成与原始格式相同的 .bmp 的设置,因此可以读取不正确。