Метод преобразования ppm в ascii art не работает должным образом

Я написал программу для преобразования файла из формата PPM в ASCII art. Каждый пиксель входного изображения преобразуется в оттенки серого путем вычисления среднего значения красного, зеленого и синего ((красный + зеленый + синий)/3).

Обновление базовой версии состоит в том, что я вычисляю среднее значение RGB в окне размером n*n и преобразую его в символ, который уменьшит размер изображения. Таким образом, если заданное число n равно 3, окно имеет размер 3*3, что означает, что вы суммируете все девять красных, зеленых и синих значений и делите их в 3 раза n*n (3*3 в данном случае). Когда программа считает шкалу серого для первого окна, она переходит к другому и так далее до конца. Когда есть конец ширины, он прыгает вниз на количество пикселей n и читает следующую строку и т. Д.

Когда вычисляется шкала серого, она преобразуется в символ, и этот символ записывается в выходной файл для формирования художественного изображения ASCII.

Есть код, который должен сделать эту работу:

    int x, y;
    for (x = 0; x < width; x++){ 
        for(y=0; y < height; y++){
            array[x][y][0] = fgetc(input); //red
            array[x][y][1] = fgetc(input); //green
            array[x][y][2] = fgetc(input); //blue

            int greyscale;
            // greyscale = (red + green +blue)/3;

            int blockx, blocky;
            for(blockx = 0; blockx < n; blockx+=n){
                for(blocky=0; blocky < n; blocky+=n){
                    greyscale = ((array[x][y][0] + array[x][y][1] +array[x][y][2])/(3*(n*n)));
                    char c = method_of_conversion(greyscale);
                    fprintf(output,"%c",c); // write ASCII art to the output file 
                }

            }   
        }fprintf(output,"\n");
    }

Выходной файл для одного ppm должен выглядеть так:

                    ..'::....'oo&&:..                                           
               ..:'#8@@oo#@@@@@@@@@8      .8&o              .&o.                
            ooo:'.'o88'    8@@@@@@@&                8'    '@@@@@@' .  .&..      
   '@@@8&'o8&:8@@'&#:@o@#   &@@@@@&         &@@o    .o'@8@@@@@@@@@@@@@@@@@@#o:&o
:& 8@@@@@@@@@@@@@@@@8&.&@o  #@@'   #8     :@@8@@o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   &@@#o8@@@@@@@@@@   '@o.   :'          @@@ #@@@@@@@@@@@@@@@@@@@@@@@@@@@@8:8&' 
    ..    &@@@@@@@@#&..@@@o           'o  :o.@@@@@@@@@@@@@@@@@@@@@@@@@&   .@    
           &@@@@@@@@@@#@@@@&          '8o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8        
            8@@@@@@@@@@@@8 &           &@@@@@@@@@@#:@@@@@@@@@@@@@@@@@@@.        
            #@@@@@@@@@@@:             8##:&'@@'..@&&@@@@@@@@@@@@@@@@@& &        
            '@@@@@@@@@@.              @@   '. @@@@@ @@@@@@@@@@@@@@: &  :        
             :@@@@@@@@&               8@@@&    .@@@@@@@@@@@@@@@@@@@  &.         
              :@@@@:.8               :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@             
               '@@.                 :@@@@@@@@@@#8@@&8''@@@@@@@@@@@:             
                '@&.o '.'           @@@@@@@@@@@@:@@@@  .@@@''@@8o               
                  &@&.              @@@@@@@@@@@@@o@&    &@   o@@  .             
                     : :o.          o@@@@@@@@@@@@@'.    .@    '@.  '            
                      :@@@@.         &@@#@@@@@@@@@@      .    :  . o            
                      o@@@@@@             @@@@@@@@.          .# '@              
                      @@@@@@@@o           @@@@@@@             8oo@o .8&'        
                      @@@@@@@@@@.         .@@@@@#              :&.    '@8       
                      .@@@@@@@@8           @@@@@@                    : '        
                       o@@@@@@@'          .@@@@@@ 8                :#@o8'       
                        &@@@@@@            @@@@@ .@              .&@@@@@@       
                        8@@@@&             @@@@8 .o              @@@@@@@@@      
                        @@@@@              .@@@                  o@@@@@@@@      
                        @@@@                @8                   '@o  #@@8      
                       :@@#                                            o&     .o
                       :@#                                              :    .: 
                       8@.                                                   '  
                       o#                                                       
                        '                                                       

                         .'                        ..       ...... . ..         
                        8@               ..:'.o#&@@@@@@:o@@@@@@@@@@@@@@@@@#o.   
         ':8888&&@@@@8@@@@'         8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8.  
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Но моя программа выводит это так:

                    ..'::....'oo&&:..   

               ..:'#8@@oo#@@@@@@@@@8    
  .8&o              .&o.                
            ooo:'.'o88'    8@@@@@@@&    
            8'    '@@@@@@' .  .&..      
   '@@@8&'o8&:8@@'&#:@o@#   &@@@@@&     
    &@@o    .o'@8@@@@@@@@@@@@@@@@@@#o:&o
:& 8@@@@@@@@@@@@@@@@8&.&@o  #@@'   #8   
  :@@8@@o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   &@@#o8@@@@@@@@@@   '@o.   :'         
 @@@ #@@@@@@@@@@@@@@@@@@@@@@@@@@@@8:8&' 
    ..    &@@@@@@@@#&..@@@o           'o
  :o.@@@@@@@@@@@@@@@@@@@@@@@@@&   .@    
           &@@@@@@@@@@#@@@@&          '8
o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8        
            8@@@@@@@@@@@@8 &           &
@@@@@@@@@@#:@@@@@@@@@@@@@@@@@@@.        
            #@@@@@@@@@@@:             8#
#:&'@@'..@&&@@@@@@@@@@@@@@@@@& &        
            '@@@@@@@@@@.              @@
   '. @@@@@ @@@@@@@@@@@@@@: &  :        
             :@@@@@@@@&               8@
@@&    .@@@@@@@@@@@@@@@@@@@  &.         
              :@@@@:.8               :@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@             
               '@@.                 :@@@
@@@@@@@#8@@&8''@@@@@@@@@@@:             
                '@&.o '.'           @@@@
@@@@@@@@:@@@@  .@@@''@@8o               
                  &@&.              @@@@
@@@@@@@@@o@&    &@   o@@  .             
                     : :o.          o@@@
@@@@@@@@@@'.    .@    '@.  '            
                      :@@@@.         &@@
#@@@@@@@@@@      .    :  . o            
                      o@@@@@@           
  @@@@@@@@.          .# '@              
                      @@@@@@@@o         
  @@@@@@@             8oo@o .8&'        
                      @@@@@@@@@@.       
  .@@@@@#              :&.    '@8       
                      .@@@@@@@@8        
   @@@@@@                    : '        
                       o@@@@@@@'        
  .@@@@@@ 8                :#@o8'       
                        &@@@@@@         
   @@@@@ .@              .&@@@@@@       
                        8@@@@&          
   @@@@8 .o              @@@@@@@@@      
                        @@@@@           
   .@@@                  o@@@@@@@@      
                        @@@@            
    @8                   '@o  #@@8      
                       :@@#             
                               o&     .o
                       :@#              
                                :    .: 
                       8@.              
                                     '  
                       o#               

                        '               



                         .'             
           ..       ...... . ..         
                        8@              
 ..:'.o#&@@@@@@:o@@@@@@@@@@@@@@@@@#o.   
         ':8888&&@@@@8@@@@'         8@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8.  
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Может кто-нибудь сказать мне, что я делаю не так?

1 ответ

Решение

Я скопировал ваш вывод в текстовый редактор. Я обнаружил, что после колонки 40 был вставлен возврат каретки / перевод строки. Удаление его выявило ваше первоначальное изображение. Я не могу объяснить этот перевод строки. Мне кажется забавным, что ваш внешний цикл повторяется по ширине, а ваш внутренний цикл по высоте. Я бы ожидал, что наоборот, печатая одну горизонтальную линию для каждой y-линии.

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