【问题标题】:Read Bmp Greyscales into C将 Bmp 灰度读入 C
【发布时间】:2011-07-18 00:42:55
【问题描述】:

我寻找如何将 Bmp 文件读入 C 下的 2 或 1 维数组,有很多解决方案,但不是我需要的。 我需要将黑白 bmp 读入(开始)二维数组,该数组必须包含从 0 到 255(灰度)的值 然后将其转换为一维数组(但这不是问题)。 Matlab 会自动执行此操作,但我希望在 C/C++ 下更加自主地工作 最后 bmp 应保存到 Postgre 数据库 int 数组中。 谢谢

【问题讨论】:

标签: c++ c postgresql bmp grayscale


【解决方案1】:

我为另一个 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;

bitmap 这里是指向像素表的指针(应该是无符号的 但是为了正确访问)。请注意,bmp 中的像素行可以存储在 倒序。

【讨论】:

    【解决方案2】:

    抱歉,误读了问题:/
    如果您不介意稍微“扭曲”规则

    #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;
    }
    

    【讨论】:

    • 我看不出这段代码对我有什么帮助,我的问题是在读取 Bmp 时获得正确的 geryscales,但直到现在我的值在 0 到 255 之间,但与我在 Matlab Matrix 中看到的那些。
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2013-05-05
    • 2020-03-21
    • 2019-12-03
    • 2018-09-11
    • 1970-01-01
    相关资源
    最近更新 更多