2011-03-18 51 views
1

我在寻找如何在C语言下将Bmp文件读入2或1维数组,但有许多解决方案,但没有我需要的解决方案。 我需要读取黑色和白色bmp到(开始)2维数组,其中必须包含从0到255(灰度) 的值,然后将其转换为1维数组(但这不是问题)。 Matlab做这个automticly,但我想要更自主地在C/C++ 下工作,最后bmp应保存到Postgre数据库诠释数组。 感谢将Bmp灰度读入C

+1

你看了[关于BMP的维基百科文章](http://en.wikipedia.org/wiki/BMP_file_format)?我认为它很好地解释了BMP文件格式。 – pmg 2011-03-18 11:09:02

回答

0

这里面有我对做一个bmp装载机另一个SO问题:
http://nishi.dreamhosters.com/u/so_bmp_v0.zip
该示例bmp有RGB,但它似乎也可以使用灰度。这里

FILE* f = fopen("winnt.bmp", "rb"); if(f==0) return 1; 
fread(buf, 1,sizeof(buf), f); 
fclose(f); 

BITMAPFILEHEADER& bfh = (BITMAPFILEHEADER&)buf[0]; 
BITMAPINFO& bi = (BITMAPINFO&)buf[sizeof(BITMAPFILEHEADER)]; 
BITMAPINFOHEADER& bih = bi.bmiHeader; 
char* bitmap = &buf[bfh.bfOffBits]; 
int SX=bih.biWidth, SY=bih.biHeight; 

是指针像素表(应无符号 为适当的访问虽然)。请注意,bmp中的像素行可以按逆向顺序以 存储。

0

对不起,误读的问题:/
如果你不介意的“扭曲”的规则,一个微小的一点

#include <stdio.h> 

int main(void) { 
    int data[100][30] = {{0}}; /* initialize 2D array to all zeroes */ 
    int *p1d; 
    size_t index; 

    data[42][20] = 42; /* set 1 element ot 42 */ 
    p1d = &data[0][0]; 
    index = 42*30 + 20; 
    printf("%d (should be 42)\n", p1d[index]); /* pretend it's a 1D array */ 
    return 0; 
} 

+0

我没有看到这段代码如何帮助我,我的问题是在阅读Bmp时得到正确的温度,但直到现在,我已经得到0到25​​5之间的值,但与我在Matlab矩阵中看到的不一样。 – Mehdi 2011-03-18 10:37:43