C, обработка BMP ... без понятия: / - PullRequest
0 голосов
/ 28 апреля 2011

Я должен прочитать файл .bmp, а затем изменить его на основе аргументов командной строки.

Примеры:
-от 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 Ответ

1 голос
/ 28 апреля 2011

Начните с чтения BITMAPFILEHEADER, а затем BITMAPINFO (который содержит BITMAPINFOHEADER). Это даст вам информацию, необходимую для поиска и интерпретации пикселей.

...