画像は元画像もランダム画像も縦横256×256で、画像データを出したテキストファイルはタブ区切りとなっています。二つとも二値化しています。黒が255で、白が0となっています。visual studio 2005を使っています。
この下のプログラムを起動して、text.txtを見ても暗号化した(元画像データとランダム画像データの否定排他的論理和での重ね合わせ)部分と復号化した(否定排他的論理和で重ね合わせたものとランダムデータの反転したものの重ね合わせ部分)部分がうまくできてないです。復号化した部分のテキストデータは全て0になっています。
これは元画像とランダム画像のテキストデータが変数aとbにちゃんと入ってないのでしょうか?
それともほかに不備があるのでしょうか?
もしどこを修正するのか分かる方は、どこをどう修正するのか教えてください。
よろしくお願いします。
#include<stdio.h>
int main(void){
FILE *file;
file = fopen("test.txt","w");
//元画像
FILE *fp1;
char *fname1="C:\\Documents and Settings\\2013Sotsuken\\My Documents\\test\\hosi1.txt";
int c,j,k,s,t,u,v;
int **a=new int*[512];
for(int i=0;i<512;i++){
a[i]=new int[512];
}
fp1=fopen(fname1,"r");
if(fp1==NULL){
fprintf(file,"%sファイルが開けません\n",fname1);
return -1;
}
s=t=0;
for(s=0;s<512;s++){
for(t=0;t<340;t++){
c=fgetc(fp1);
if(c=='0')
a[s][t]=0;
else if(c=='255')
a[s][t]=255;
fprintf(file,"%c",c);
}
}
fprintf(file,"\n");
fprintf(file,"\n\n");
//ランダム画像
FILE *fp2;
char *fname2="C:\\Documents and Settings\\2013Sotsuken\\My Documents\\test\\ekisyou.txt";
int d;
int **b=new int*[512];
for(int i=0;i<512;i++){
b[i]=new int[512];
}
fp2=fopen(fname2,"r");
if(fp2==NULL){
fprintf(file,"%sファイルが開けません\n",fname2);
return -1;
}
u=v=0;
for(u=0;u<512;u++){
for(v=0;v<340;v++){
d=fgetc(fp2);
if(d=='0')
b[u][v]=0;
else if(d=='255')
b[s][t]=255;
fprintf(file,"%c",d);
}
}
fprintf(file,"\n\n");
//元画像データとランダム画像データの否定排他的論理和での重ね合わせ
int **m=new int*[255];
for(int i=0;i<256;i++){
m[i]=new int[255];
}
for(j=0;j<256;j++){
for(k=0;k<256;k++){
if(a[j][k]==0&&b[j][k]==0 || a[j][k]==255&&b[j][k]==255)
m[j][k]=255;
else
m[j][k]=0;
fprintf(file,"%d\t",m[j][k]);
}
fprintf(file,"\n");
}
fprintf(file,"\n\n");
//否定排他的論理和で重ね合わせたものとランダム画像データの反転したものの重ね合わせ
int **x=new int*[255];
for(int i=0;i<256;i++){
x[i]=new int[255];
}
for(j=0;j<256;j++){
for(k=0;k<256;k++){
if(m[j][k]==255&&b[j][k]==255)
x[j][k]=255;
else
x[j][k]=0;
fprintf(file,"%d\t",x[j][k]);
}
fprintf(file,"\n");
}
//for(int i=0;i<256;i++){
// delete[] a[i];
//}
//delete[] a;
//for(int i=0;i<256;i++){
// delete[] b[i];
//}
//delete[] b;
//for(int i=0;i<256;i++){
// delete[] m[i];
//}
//delete[] m;
//for(int i=0;i<256;i++){
// delete[] x[i];
//}
//delete[] x;
fclose(fp1);
fclose(fp2);
fclose(file);
return 0;
}