/*=============================================*/
/*             カラー画像の減色                */
/*=============================================*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void main(void)
{
  /*============================*/
  /*        変数宣言部           */
  /*============================*/
  int i,j;                                    //■ ループ用変数
  unsigned char Pix[128][128*3];              //■ バイナリ画像データ格納用
  char buff[128];                             //■ ヘッダ抽出用
  int x,y;                                    //■ 画像ファイルのヘッダ操作用変数
  FILE *fp;                                   //■ ファイルポインタ
  
  /*============================*/
  /*        画像入力部           */
  /*============================*/
  fp=fopen("./image_data/7.ppm", "rb" );     //■ read binaryモードで画像ファイルを開く
  fgets(buff,128,fp);                        //■ ファイルの識別符号を読み込み
  fgets(buff,128,fp);                        //■ 画像サイズの読み込み
  fgets(buff,128,fp);                        //■ 最大輝度値の読み込み
  
  //■ 画像データの読み込み
  for(j=0;j<128;j++)
    fread(Pix[j],sizeof(unsigned char),128*3,fp);
  fclose(fp);
  
  /*============================*/
  /*           減色             */
  /*============================*/
  for(j=0;j<128;j++){
    for(i=0;i<128;i++){
      
      if(Pix[j][3*i]<=63)
        Pix[j][3*i]=32;
      else{
        if(Pix[j][3*i]<=127)
          Pix[j][3*i]=92;
        else{
          if(Pix[j][3*i]<=191)
            Pix[j][3*i]=160;
          else
            Pix[j][3*i]=224;
        }
      }
      
      
    }
  }
  /*============================*/
  /*   カラー画像の書き込み     */
  /*============================*/
  fp=fopen("./image_data/test.ppm", "wb" );  //■ write binaryモードで画像ファイルを開く
  fprintf(fp,"P6\n");                        //■ ファイルの識別符号を書き込む
  fprintf(fp,"128 128\n");                   //■ 画像サイズを書き込む
  fprintf(fp,"255\n");                       //■ 最大輝度値を書き込む
  
  //■ 画像データの書き込み
  for(j=0;j<128;j++)
    fwrite(Pix[j],sizeof(unsigned char),128*3,fp);
  
  fclose(fp);
  
} // end_of_main

[戻る][Top]