1

好吧,我是C ++的新手,自从我寻找示例,解释以来已经两天了,我尝试了不同的库,但我做不到,所以我只是寻求帮助。

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

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

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

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

4

1 回答 1

1

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

我发现很难理解为什么图像格式组件需要这样一个 VAST 范围。

编辑:鉴于您的评论,是的,完全可以调整该代码。尽管值得注意的是 0..63(64 色阶)是 6 位的。不过,我认为浪费了 2 位。

如果它是灰度并且分量是8bpp,它非常简单。基本上你需要的存储是宽*高字节。

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

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

编辑 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 中计算的大小来读取整个图像。

于 2013-09-12T12:40:12.693 回答