在 C/C++ 中将 64 位 bmp 文件转换为数组

Converting 64-bit bmp file to array in C/C++

本文关键字:文件 bmp 转换 数组 C++ 中将      更新时间:2023-10-16

嗯,我是C++的新手,已经两天没有寻找示例、解释了,我尝试了不同的库,但我做不到,所以我只是寻求帮助。

我有一张.bmp图片,我知道高度和长度,我想在我的程序中用作 2D 数组。

所以我找到了这段代码,但它不起作用。问题是我的图像是 64 bpp,尽管视觉上是单色的。

我已经阅读了文档,但我不明白,因为我在C++以及与低级编程相关的所有方面的技能很差。

您认为可以将以前的代码改编为每像素 64 位的 bmp 图像吗?

据我所知,位图文件格式不支持每个组件 64 位。 我不知道有任何文件格式允许这种格式(尽管如果不存在,我会感到惊讶)。

我发现很难理解为什么图像格式组件需要如此广泛的范围。

编辑 :鉴于您的评论,是的,绝对可以调整该代码。 虽然值得注意的是 0..63(64 色阶)是 6 位。 不过,我假设浪费了 2 位。

如果它是灰度并且组件为 8bpp,则非常简单。 基本上,您需要的存储空间是宽度*高度字节。

char* pBitmap = malloc( bmp.width * bmp.height );

然后,您可以将像素直接发送到上面的字符缓冲区中,读取单个宽度 * 高度。

编辑 2

好的,每个组件 16 位,有 4 个组件,您需要这样的结构:

struct Pixel16RGBA
{
    unsigned short r;
    unsigned short g;
    unsigned short b;
    unsigned short a;
};

然后按如下方式分配:

Pixel16RGBA* pBitmap = (Pixel16RGBA)malloc( bmp.width * bmp.height * 4 * sizeof( unsigned short ) );

然后,您将像以前一样使用上面malloc中计算的大小来浏览整个图像。