好吧,我是C ++的新手,自从我正在寻找示例,解释,我尝试不同的库以来已经有两天了,但我不能这样做,所以我只是寻求帮助。
我在.bmp中有一张图片,我知道高度和长度,我想在我的程序中用作2D数组。
所以我找到this code,但它不起作用。问题是我的图像是64 bpp,虽然在视觉上是单色的。
我读过the documentation,但我不明白,因为我的C ++技能很差,而且与低级编程有关。
您是否认为可以将之前的代码调整为每像素64位的bmp图像?
答案 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中计算的大小来整像整个图像。