⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imgio.c

📁 数字水印技术处理程序集合
💻 C
📖 第 1 页 / 共 2 页
字号:
    printf ( "\n" );
    printf ( "PPMB_READ: Fatal error!\n" );
    printf ( "  Unable to allocate memory for data.\n" );
    printf ( "  Seeking %d bytes.\n", numbytes );
    return ERROR;
  }

  *garray = (image*)malloc(numbytes);

  if ( *garray == NULL ) {
    printf ( "\n" );
    printf ( "PPMB_READ: Fatal error!\n" );
    printf ( "  Unable to allocate memory for data.\n" );
    printf ( "  Seeking %d bytes.\n", numbytes );
    return ERROR;
  }

  *barray = (image*)malloc(numbytes);

  if (*barray == NULL) {
    printf ( "\n" );
    printf ( "PPMB_READ: Fatal error!\n" );
    printf ( "  Unable to allocate memory for data.\n" );
    printf ( "  Seeking %d bytes.\n", numbytes );
    return ERROR;
  }

/* Read the data. */
  result = ppmb_read_data ( filein, *xsize, *ysize, *rarray, *garray, *barray );

  if ( result == ERROR ) {
    printf ( "\n" );
    printf ( "PPMB_READ: Fatal error!\n" );
    printf ( "  PPMB_READ_DATA failed.\n" );
    return ERROR;
  }

/* Close the file. */
  fclose ( filein );

  return SUCCESS;
}

/******************************************************************************/

int ppmb_read_data ( FILE *filein, int xsize, int ysize, image *rarray, 
        image *garray, image *barray ) 
{
  int   i;
  int   int_val;
  image  *indexb;
  image  *indexg;
  image  *indexr;
  int   j;
  int   k;
  int   numval;

  indexr = rarray;
  indexg = garray;
  indexb = barray;
  numval = 0;

  for ( j = 0; j < ysize; j++ ) {
    for ( i = 0; i < xsize; i++ ) {

      for ( k = 0; k < 3; k++ ) {

        int_val = fgetc ( filein );

        if ( int_val == EOF ) {
          printf ( "\n" );
          printf ( "PPMB_READ_DATA: Failed reading data byte %d.\n", numval );
          return ERROR;
        }
        else {
          if ( k == 0 ) {
            *indexr = int_val;
            indexr = indexr + 1;
          }
          else if ( k == 1 ) {
            *indexg = int_val;
            indexg = indexg + 1;
          }
          else if ( k == 2 ) {
            *indexb = int_val;
            indexb = indexb + 1;
          }
        }
        numval = numval + 1;
      }
    }
  }
  return SUCCESS;
}
/******************************************************************************/

int ppmb_read_header ( FILE *filein, int *xsize, int *ysize, int *maxrgb ) 
{
  int   c_val;
  int   count;
  int   flag;
  int   nchar;
  int   state;
  char  string[80];

  state = 0;
  nchar = 0;

  for ( ;; ) {

    c_val = fgetc ( filein );

    if ( c_val == EOF ) {
      return ERROR;
    }

    if (c_val == '#')
    {
                        while (c_val !='\n') c_val = fgetc ( filein );
      c_val = fgetc ( filein );
    }

/*  If not whitespace, add the character to the current string.*/

    flag = isspace ( c_val );

    if ( !flag ) {
      string[nchar] = c_val;
      nchar = nchar + 1;
    }

/* See if we have finished an old item, or begun a new one. */
    if ( state == 0 ) {
      if ( !flag ) {
        state = 1;
      }
      else {
        return ERROR;
      }
    }
    else if ( state == 1 ) {
      if ( flag ) {
        string[nchar] = 0;
        nchar = nchar + 1;
        if ( strcmp ( string, "P6" ) != 0 && strcmp ( string, "p6" ) != 0 ) {
          printf ( "\n" );
          printf ( "PPMB_READ_HEADER: Fatal error.\n" );
          printf ( "  Bad magic number = %s.\n", string );
          return ERROR;
        }
        nchar = 0;
        state = 2;
      }
    }
    else if ( state == 2 ) {
      if ( !flag ) {
        state = 3;
      }
    }
    else if ( state == 3 ) {
      if ( flag ) {
        string[nchar] = 0;
        nchar = nchar + 1;
        count = sscanf ( string, "%d", xsize );
        if ( count == EOF ) {
          return ERROR;
        }
        nchar = 0;
        state = 4;
      }
    }
    else if ( state == 4 ) {
      if ( !flag ) {
        state = 5;
      }
    }
    else if ( state == 5 ) {
      if ( flag ) {
        string[nchar] = 0;
        nchar = nchar + 1;
        count = sscanf ( string, "%d", ysize );
        if ( count == EOF ) {
          return ERROR;
        }
        nchar = 0;
        state = 6;
      }
    }
    else if ( state == 6 ) {
      if ( !flag ) {
        state = 7;
      }
    }
    else if ( state == 7 ) {
      if ( flag ) {
        string[nchar] = 0;
        nchar = nchar + 1;
        count = sscanf ( string, "%d", maxrgb );
        if ( count == EOF ) {
          return ERROR;
        }
        nchar = 0;
        return SUCCESS;
      }
    }
  }
}


/******************************************************************************/

int WritePPM ( char *fileout_name, int xsize, int ysize, int maxrgb,
        image *rarray, image *garray, image *barray ) 
{

  FILE *fileout;
  int   result;

/* Open the output file.*/
  fileout = fopen ( fileout_name, "wb" );

  if ( fileout == NULL ) {
    printf ( "\n" );
    printf ( "PPMB_WRITE: Fatal error!\n" );
    printf ( "  Cannot open the output file %s.\n", fileout_name );
    return ERROR;
  }

/* Write the header. */
  result = ppmb_write_header ( fileout, xsize, ysize, maxrgb );

  if ( result == ERROR ) {
    printf ( "\n" );
    printf ( "PPMB_WRITE: Fatal error!\n" );
    printf ( "  PPMB_WRITE_HEADER failed.\n" );
    return ERROR;
  }

/* Write the data. */
  result = ppmb_write_data ( fileout, xsize, ysize, rarray, garray, barray );

  if ( result == ERROR ) {
    printf ( "\n" );
    printf ( "PPMB_WRITE: Fatal error!\n" );
    printf ( "  PPMB_WRITE_DATA failed.\n" );
    return ERROR;
  }

/* Close the file. */
  fclose ( fileout );

  return SUCCESS;
}

/******************************************************************************/

int ppmb_write_data ( FILE *fileout, int xsize, int ysize, image *rarray, image *garray, image *barray ) 
{
  int  i;
  image *indexb;
  image *indexg;
  image *indexr;
  int  j;

  indexr = rarray;
  indexg = garray;
  indexb = barray;

  for ( j = 0; j < ysize; j++ ) {
    for ( i = 0; i < xsize; i++ ) {
      if (*indexr>255) fputc(255,fileout);
                        else if (*indexr<0) fputc(0,fileout);
      else fputc ( *indexr, fileout );
      
      if (*indexg>255) fputc(255,fileout);
      else if (*indexg<0) fputc(0,fileout);
      else fputc ( *indexg, fileout );
      
      if (*indexb>255) fputc(255,fileout);
      else if (*indexb<0) fputc(0,fileout);
      else fputc ( *indexb, fileout );
      
      indexr = indexr + 1;
      indexg = indexg + 1;
      indexb = indexb + 1;
    }
  }
  return SUCCESS;
}

/******************************************************************************/

int ppmb_write_header ( FILE *fileout, int xsize, int ysize, int maxrgb ) 
{

  fprintf ( fileout, "P6\n%d %d\n%d\n", xsize, ysize, maxrgb );
        return SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -