我寻找如何将 Bmp 文件读入 C 下的 2 或 1 维数组,有很多解决方案,但不是我需要的。我需要将黑白 bmp 读入(开始)二维数组,该数组必须包含从 0 到 255(灰度)的值,然后将其转换为一维数组(但这不是问题)。Matlab 会自动执行此操作,但我希望在最后在 C/C++ 下更加自主地工作,bmp 应保存到 Postgre 数据库 int 数组中。谢谢
问问题
1976 次
2 回答
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;
}
于 2011-03-18T09:50:55.730 回答
0
我为另一个 SO 问题制作了一个 bmp 加载程序: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 中的像素行可以以相反的顺序存储。
于 2011-03-18T11:22:32.363 回答