• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: C/C++
  • 标签: pg    

资源简介

该程序用于pgm格式的图像读取与保存,C++编写,可直接运行,希望能够帮助到有需要的人。PGM格式的图像由头信息和数据信息构成。

资源截图

代码片段和文件信息


#include < stdio.h >
#include < stdlib.h >
#include “pgm.h“

/**********************File I/O functions*******************************/
/***********************************************************************/

/*Gets an ascii pgm image file store as a color pgm.*/
void getPGMfile (char filename[] PGMImage *img)
 {
   FILE *in_file;
   char ch;
   int row col type;
   int ch_int;
 
   in_file = fopen(filename “r“);
   if (in_file == NULL)
   {
     fprintf(stderr “Error: Unable to open file %s\n\n“ filename);
     exit(8);
   }
 
   printf(“\nReading image file: %s\n“ filename);
   
   /*determine pgm image type (only type three can be used)*/
   ch = getc(in_file);
   if(ch != ‘P‘)
   {
      printf(“ERROR(1): Not valid pgm/ppm file type\n“);
      exit(1);
   }
   ch = getc(in_file);
   /*convert the one digit integer currently represented as a character to
     an integer(48 == ‘0‘)*/
   type = ch - 48;
   if((type != 2) && (type != 3) && (type != 5) && (type != 6))
   {
      printf(“ERROR(2): Not valid pgm/ppm file type\n“);
      exit(1);
   }
 
   while(getc(in_file) != ‘\n‘);             /* skip to end of line*/
 
   while (getc(in_file) == ‘#‘)              /* skip comment lines */
   {
     while (getc(in_file) != ‘\n‘);          /* skip to end of comment line */
   }
 
   /*there seems to be a difference between color and b/w.  This line is needed
     by b/w but doesn‘t effect color reading...*/
   fseek(in_file -1 SEEK_CUR);             /* backup one character*/
 
   fscanf(in_file“%d“ &((*img).width));
   fscanf(in_file“%d“ &((*img).height));
   fscanf(in_file“%d“ &((*img).maxVal));
 
   printf(“\n width  = %d“(*img).width);
   printf(“\n height = %d“(*img).height);
   printf(“\n maxVal = %d“(*img).maxVal);
   printf(“\n“);
  
   if (((*img).width  > MAX) || ((*img).height  > MAX))
   {
     printf(“\n\n***ERROR - image too big for current image structure***\n\n“);
     exit(1);
   }
 
   if(type == 2) /*uncompressed ascii file (B/W)*/
   {
      for (row=(*img).height-1; row >=0; row--)
        for (col=0; col< (*img).width; col++)
        {
           fscanf(in_file“%d“ &ch_int);
           (*img).data[row][col].red = ch_int;
           (*img).data[row][col].green = ch_int;
           (*img).data[row][col].blue = ch_int;
        }
   }
   else if(type == 3) /*uncompressed ascii file (color)*/
   {
      for (row=(*img).height-1; row >=0; row--)
        for (col=0; col< (*img).width; col++)
        {
    
    fscanf(in_file“%d“ &ch_int);
    ((*img).data[row][col].red) = (unsigned char)ch_int;
      
    fscanf(in_file“%d“ &ch_int);
    ((*img).data[row][col].green) = (unsigned char)ch_int;
    
    fscanf(in_file“%d“ &ch_int);
    ((*img).data[row][col].blue) = (unsigned char)ch_int;
        }
   }
   else if(type == 5) /*compressed file (B/W)*/
 /*note: this type remains untested at this time...*/
   {
    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-10-10 14:56  pgm_read_save_c\
     文件        5884  2018-10-10 14:55  pgm_read_save_c\pgm.c
     文件         766  2018-10-10 14:55  pgm_read_save_c\pgm.h

评论

共有 条评论