将ppm转换为ascii art的方法无效

时间:2015-05-22 20:48:39

标签: c output ascii-art

我编写了一个程序,用于将文件从PPM格式转换为ASCII艺术。通过计算红绿色和蓝色值的平均值((红色+绿色+蓝色)/ 3),输入图像的每个像素都转换为灰度。

基本版本的升级是我在大小为n * n的窗口中计算RGB的平均值,并将其转换为可减小图像大小的字符。因此,如果给定数字n为3,则窗口大小为3 * 3,这意味着您将所有九个红色,绿色和蓝色值相加并将其除以n * n的3倍(在这种情况下为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 个答案:

答案 0 :(得分:1)

我已将您的输出复制到文本编辑器。我发现在第40列之后插入了回车/换行。删除它显示您的原始图像。我无法解释这个换行。我觉得很有趣,但你的外循环遍历宽度,你的内循环遍及高度。我希望相反,为每个y线打印一条水平线。