/*---------------------------------------------------------*/ /* gccIMcolor.c */ /*---------------------------------------------------------*/ /* ImageMagick で使える色一覧 */ /*---------------------------------------------------------*/ #include #include #include typedef struct{ char slname[50]; char scname[50]; char rgbcna[50]; char hexcna[50]; }CN; void TOLOW(char *str); int COMP_SSS(const void *a,const void *b); int COMP_SSL(const void *a,const void *b); /*---------------------------------------------------------*/ int main(void) { int i,j,k,nd,iflg; CN dset[1000]; FILE *fin,*fout,*fw1,*fw2,*fp; char dat[100]=""; char sw[50]=""; char *p; char fnameR[50]; char fnameB[50]; int ww=88; int hh=31; char drc[]="c:\\GNUpro\\gcc7IMcolor"; /*データ読み込み*/ fin=fopen("dat_color.txt","r"); i=0; while(fgets(dat,sizeof dat,fin)!=NULL){ strcpy(sw,strtok(dat," ")) ; strcpy(dset[i].scname,sw); strcpy(sw,strtok(NULL," ")); strcpy(dset[i].rgbcna,sw); strcpy(sw,strtok(NULL," "));strncpy(dset[i].hexcna,sw,strlen(sw)-1); i=i+1; } fclose(fin); nd=i-1; printf("End of data input. nd=%d\n",nd); for(i=0;i<=nd;i++){ /*scnameの小文字変換をslnameに代入*/ strcpy(sw,dset[i].scname); TOLOW(sw); strcpy(dset[i].slname,sw); /*rgbaは残しrgbは削除*/ iflg=0; strcpy(sw,dset[i].rgbcna); p=strstr(sw,"rgba");if(p!=NULL)iflg=1; if(iflg==0){ p=sw; strcpy(p,&p[3]); strcpy(sw,p); } strcpy(dset[i].rgbcna,sw); } /*ImageMagick実行*/ fp=popen("cmd.exe","w"); for(i=0;i<=nd;i++){ strcpy(fnameB,""); strcat(fnameB,drc); strcat(fnameB,"\\imcoldat\\"); strcat(fnameB,dset[i].slname); strcat(fnameB,".png"); fprintf(fp,"convert -size %dx%d canvas:%s %s\n",ww,hh,dset[i].scname,fnameB); } fprintf(fp,"exit\n"); fflush(fp); pclose(fp); printf("End of ImageMagick execution.\n"); /*一般職と灰色でのデータ振り分け書き込み*/ fw1=fopen("out_color1.txt","w"); fw2=fopen("out_color2.txt","w"); for(i=0;i<=nd;i++){ iflg=0; strcpy(sw,dset[i].slname); j=strlen(sw); p=strstr(sw,"gray");if(p!=NULL&&5<=j)iflg=1; p=strstr(sw,"grey");if(p!=NULL&&5<=j)iflg=2; if(1<=iflg){ p=sw; strcpy(p,&p[4]); for(k=0;k<=100;k++){ if(k==(int)(*p))iflg=3; } } if(iflg<=2)fprintf(fw1,"%s %s %s %s\n",dset[i].slname,dset[i].scname,dset[i].rgbcna,dset[i].hexcna); if(iflg==3)fprintf(fw2,"%s %s %s %s\n",dset[i].slname,dset[i].scname,dset[i].rgbcna,dset[i].hexcna); } fclose(fw1); fclose(fw2); printf("End of out_color.\n"); /*htmlファイル作成*/ fout=fopen("imcolor.html","w"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); for(j=1;j<=2;j++){ switch(j){ case 1:strcpy(fnameR,"out_color1.txt");break; case 2:strcpy(fnameR,"out_color2.txt");break; } /*データ読み込み*/ fin=fopen(fnameR,"r"); i=0; while(fgets(dat,sizeof dat,fin)!=NULL){ strcpy(sw,strtok(dat," ")) ; strcpy(dset[i].slname,sw); strcpy(sw,strtok(NULL," ")); strcpy(dset[i].scname,sw); strcpy(sw,strtok(NULL," ")); strcpy(dset[i].rgbcna,sw); strcpy(sw,strtok(NULL," "));strncpy(dset[i].hexcna,sw,strlen(sw)-1); i=i+1; } fclose(fin); nd=i-1; /*色名順ソート実行*/ switch(j){ case 1:qsort(dset,nd+1,sizeof(CN),COMP_SSS);break; case 2:qsort(dset,nd+1,sizeof(CN),COMP_SSL);break; } fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); for(k=0;k<=1;k++){ for(i=0;i<=nd;i++){ switch(k){ case 0:iflg=0; p=strstr(dset[i].slname,"none") ;if(p!=NULL)iflg=1; p=strstr(dset[i].slname,"transparent");if(p!=NULL)iflg=1; break; case 1:iflg=1; p=strstr(dset[i].slname,"none") ;if(p!=NULL)iflg=0; p=strstr(dset[i].slname,"transparent");if(p!=NULL)iflg=0; break; } if(iflg==0){ strcpy(fnameB,""); strcat(fnameB,dset[i].slname); strcat(fnameB,".png"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); fprintf(fout,"\n"); } } } } fprintf(fout,"
\n"); fprintf(fout,"png image\n"); fprintf(fout,"\n"); fprintf(fout,"Color name\n"); fprintf(fout,"\n"); fprintf(fout,"Hex number\n"); fprintf(fout,"\n"); fprintf(fout,"(r, g, b)\n"); fprintf(fout,"
\n"); fprintf(fout,"\"%s\"\n",fnameB,dset[i].scname,ww,hh); fprintf(fout,"\n"); fprintf(fout,"%s\n",dset[i].scname); /*色名*/ fprintf(fout,"\n"); fprintf(fout,"%s\n",dset[i].hexcna); /*16進数*/ fprintf(fout,"\n"); fprintf(fout,"%s\n",dset[i].rgbcna); /*RGB*/ fprintf(fout,"
"); fprintf(fout,"
"); fprintf(fout,""); fprintf(fout,""); fclose(fout); printf("End of html writing\n"); return 0; } /*---------------------------------------------------------*/ void TOLOW(char *str) { /*小文字に変換*/ int i; for(i=0;i<=strlen(str)-1;i++){ str[i]=tolower(str[i]); } } /*---------------------------------------------*/ int COMP_SSS(const void *a,const void *b) { /*構造体ソート*/ /*charの変数 (slname) の小さい順*/ CN temp1 = *(CN*)a; CN temp2 = *(CN*)b; char *p1=temp1.slname; char *p2=temp2.slname; return strcmp(p1,p2); } /*---------------------------------------------------------*/ int COMP_SSL(const void *a,const void *b) { /*構造体ソート*/ /*charの変数 (hexcna) の大きい順*/ CN temp1 = *(CN*)a; CN temp2 = *(CN*)b; char *p1=temp1.hexcna; char *p2=temp2.hexcna; return strcmp(p2,p1); } /*---------------------------------------------------------*/