fprintf продолжает вводить дополнительные символы, которые я не хочу.Я не могу это остановить? - PullRequest
4 голосов
/ 04 октября 2010

Я пытаюсь записать файл изображения, имеющий следующую структуру:

P5      //magic number
512 512 //dimension of image
255     //max value per pixel
[Image Data.....]

Стандарт говорит, что после максимального значения должен быть пробел или символ новой строки, а затем данные изображения. По какой-то таинственной причине код ниже> всегда <добавляет 2 символа в конце заголовка (возврат каретки и перевод строки). Что сдвигает каждый пиксель на 1. </p>

Вот что я делаю:

   FILE *outfile; 
   outfile = fopen(filename,"w");
   int i =0, j =0;
   if(outfile==NULL || outfile == 0){
   printf("Output Failed\n");
   return;
   }
   //print header first 
   fprintf(outfile, "P5\r%d %d\r255",width,height);  
   //print out data now, all one line.
   for(i = 0; i<height; i++){
         for(j=0;j<width;j++){
              fprintf(outfile, "%c",pic[j][i]);
         }
   }

   fclose(outfile);
   printf("output to %s complete.\n", filename);          
   return;

Есть ли здесь какая-то тонкость С, которую мне не хватает? Как мне заставить его не печатать этот дополнительный символ? Я сделал несколько экспериментов, и я в растерянности. Спасибо за ваше время.

Ответы [ 2 ]

9 голосов
/ 04 октября 2010

Вы должны быть в Windows, и ваш выходной файл открывается в текстовом режиме. Измените fopen(filename,"w") на fopen(filename,"wb"), чтобы открыть файл в двоичном режиме, и проблема должна исчезнуть.

2 голосов
/ 04 октября 2010

Я не вижу 2 символа после заголовка, когда запускаю приведенный выше код.

Я даже не вижу 1 символа.Данные начинаются со следующего байта после «255», заканчивающего заголовок.

Возможно ли, что ваши данные имеют pic [0] [0] как символ возврата каретки и pic [1] [0]в качестве символа перевода строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...