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

时间:2013-09-12 12:32:37

标签: c++ c arrays image bmp

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

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

所以我找到this code,但它不起作用。问题是我的图像是64 bpp,虽然在视觉上是单色的。

我读过the documentation,但我不明白,因为我的C ++技能很差,而且与低级编程有关。

您是否认为可以将之前的代码调整为每像素64位的bmp图像?

1 个答案:

答案 0 :(得分:1)

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

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

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

如果是灰度且组件为8bpp,则非常简单。基本上你需要的存储是width * height bytes。

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

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

编辑2

对于包含4个组件的每个组件16位,你需要一个像这样的结构:

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