//*************************************//
//******** created by mamo139 *********//
//*** http://mamo139.altervista.org ***//
//*************************************//
#include <stdio.h>
#include <windows.h>
unsigned char* dammibit(unsigned char numero);
unsigned char dammichar(unsigned char *bits);
int main (void){
char nomefileb[20];
printf("nome del file base:");
scanf("%s",nomefileb);
printf("%s!\n",nomefileb);
FILE * pFile;
long lSize;
pFile = fopen ( nomefileb , "rb" );
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
fclose (pFile);
long lbuffer = lSize; //byte letti alla volta nella base
printf("buffer impostato a %d bytes\n",lbuffer);
unsigned char *buf; //buffer di lettura
buf = new unsigned char [(lbuffer)+100]; //grandezza del buffer della base
unsigned char *nbuf; //buffer di lettura
nbuf = new unsigned char [(lbuffer)+100]; //grandezza del buffer della base
FILE *file, *f_out;
if ((file = fopen(nomefileb, "rb")) && (f_out = fopen("cript10.bmp", "wb"))){
printf("files aperti con successo!!\n");
long b; //byte letti
b = fread( buf, 1, 54, file);
unsigned int coordx = buf[18]+buf[19]*256;
unsigned int coordy = buf[22]+buf[23]*256;
printf("caratteristiche immagine: %d x %d\n",coordx,coordy);
fwrite( buf, 1, b, f_out);
printf("header scritto...\n");
//******************************INIZIO MODE DEL FILE*********************************//
b = fread( buf, 1, lbuffer, file);
printf("file caricato nel buffer...\n");
long x;
int tc = 4, tc2 = 10;//filtri....
printf("LA SENSIBILITà DEI TRATTI SONO: %d-%d \n",tc,tc2);
for(x=coordx*3+1;x < b-coordx*3-1;x=x+3){
unsigned char media = ( buf[x]+buf[(x+1)]+buf[(x+2)] ) / 3;
unsigned char media_s = ( buf[x-3]+buf[(x-2)]+buf[(x-1)] ) / 3;
unsigned char media_d = ( buf[x+3]+buf[(x+4)]+buf[(x+5)] ) / 3;
unsigned char media_u = ( buf[x-(coordx*3)]+buf[(x-(coordx*3)+1)]+buf[(x-(coordx*3)+2)] ) / 3;
unsigned char media_g = ( buf[x+(coordx*3)]+buf[(x+(coordx*3)+1)]+buf[(x+(coordx*3)+2)] ) / 3;
unsigned char media_us = ( buf[x-(coordx*3)-3]+buf[(x-(coordx*3)+1)-3]+buf[(x-(coordx*3)+2)-3] ) / 3;
unsigned char media_gd = ( buf[x+(coordx*3)+3]+buf[(x+(coordx*3)+1)+3]+buf[(x+(coordx*3)+2)+3] ) / 3;
unsigned char media_ud = ( buf[x-(coordx*3)+3]+buf[(x-(coordx*3)+1)+3]+buf[(x-(coordx*3)+2)+3] ) / 3;
unsigned char media_gs = ( buf[x+(coordx*3)-3]+buf[(x+(coordx*3)+1)-3]+buf[(x+(coordx*3)+2)-3] ) / 3;
int result1, result2,result3,result4;
int temp1 = media_s - media_d;
int temp2 = media_u - media_g;
int temp3 = media_us - media_gd;
int temp4 = media_ud - media_gs;
if(temp1 > 0 ) { result1 = (media_s - media_d); }
else result1 = 0 - (media_s - media_d);
if(temp2 > 0 ) { result2 = (media_u - media_g); }
else result2 = 0 - (media_u - media_g);
if(temp3 > 0 ) { result3 = (media_us - media_gd); }
else result3 = 0 - (media_us - media_gd);
if(temp4 > 0 ) { result4 = (media_ud - media_gs); }
else result4 = 0 - (media_ud - media_gs);
if( //filtro del bianco
( result1 < tc ) &&
( result2 < tc ) &&
( result3 < tc ) &&
( result4 < tc )
)
{ nbuf[x] = 255;nbuf[x+1]=255;nbuf[x+2]=255; }
else if( //filtro del secondo colore
( result1 < tc2 ) &&
( result2 < tc2 ) &&
( result3 < tc2 ) &&
( result4 < tc2 )
)
{ nbuf[x] = 192;nbuf[x+1]=192;nbuf[x+2]=192; }
else { nbuf[x] = 0;nbuf[x+1]=0;nbuf[x+2]=0; } //nero
}
fwrite( nbuf, 1, b, f_out);
}
fclose(file);
fclose(f_out);
system("PAUSE");
return 1;
}