0

我应该读入一个 .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);
}

什么是“像素起点”?我想我以某种方式遍历图像的字节并将它们复制到二维数组中......但我不知道访问文件字节的 suntax?

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

先感谢您。

4

1 回答 1

1

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

于 2011-04-27T21:58:15.267 回答