Преобразование из pgm в pbm, но получение неправильного вывода

Я написал программу, которая берет изображение PGM в качестве входных данных и преобразует его в файл PBM. Однако изображение, которое я получаю в качестве вывода, неверно.

Я определяю, является ли пиксель белым, если его значение больше, чем (max+1)/2, затем использую putchar(), чтобы поместить символ со значением 0, а если он черный, то 1(также пробовал max вместо 1 и 255). Однако на выходе я получаю кучу вертикальных линий. Я запускаю это в терминале Linux с помощью команды:

./prog < image1.pgm > image2.pbm

Это функция, которую я использую для чтения и преобразования изображения (где size — это высота и ширина, а max — это максимальное значение каждого пикселя):

      void p5_to_p4(int size, int max){

    int g1,g2,g3;
    int i;

    for(i=0; i<size; i++){
        g1=getchar();
        g2=getchar();
        g3=getchar();
        if (g1>((max+1)/2)){
            putchar(0);
            putchar(0);
            putchar(0);
        }
        else {
            putchar(max);
            putchar(max);
            putchar(max);
        }
    }
}

это выходное изображение, которое я получаю (в формате jpeg): вывод , когда это то, что я должен получить правильный вывод

0 ответов

Другие вопросы по тегам