C,BMP处理......没有线索:/

时间:2011-04-27 21:37:05

标签: c image-processing bmp

我应该读取.bmp文件,然后根据命令行参数进行更改。

示例:
-fromrow x,其中x指定要处理的最底行 -torow x,其中x指定要处理的最上面的行
-fromcol x,其中x指定要处理的最左列 -tocol x,其中x指定要处理的最右列 -op x,其中x是以下之一     - 1 =图像阈值(超过127的指定范围内的任何像素值改变t0 255,像素值127或更小改变为0)
    - 2 =负(指定范围内的任何像素值p更改为255-p)

我已经将此代码作为读取.bmp文件的示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fp= fopen("sample.bmp", "r+");
    if (fp == NULL){
            printf("Error");
    }

    int temp=0;  

    //Go to Byte 22
    fseek(fp,22,SEEK_SET);
    //Read byte 22 into an integer variable
    fread(&temp, sizeof(int), 1, fp);
    printf("Number of Rows: %d\n", temp); 

    fseek(fp,18,SEEK_SET);
    fread(&temp, sizeof(int), 1, fp);
    printf("Number of Columns: %d\n", temp); 

    fseek(fp,10,SEEK_SET);
    fread(&temp, sizeof(int), 1, fp);
    printf("Start of Pixels: %d\n", temp); 

    fclose (fp);
}

什么是“像素开始”?我想我以某种方式通过图像的字节并将它们复制到2D数组......但我不知道访问文件字节的suntax?

我甚至不知道在改变图像方面从哪里开始......:/我很茫然。 任何帮助/建议/ linfo /链接将不胜感激。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要先阅读BITMAPFILEHEADER,然后阅读BITMAPINFO(其中包含BITMAPINFOHEADER)。这些将为您提供查找和解释像素所需的信息。