Salve a tutti!!
Ho un immagine 320x240 a 24bpp, quello che devo fare è estrarre le componenti RGB e disporre ognuna di queste su un'immagine differente. Ovviamente ogni pixel è formato da 3 byte ognuno dei quali rappresenta una delle 3 componenti (ordinate sempre RGB RGB RGB...)
Quello che in pratica sto cercando di realizzare è un ciclo che prende il file raw e preleva (ad esempio per la componente R) i pixel partendo da zero e spostandosi di 3 in avanti per poi memorizzarli in un buffer...ovviamente non funziona:muro: !! Lascio che sia il codice a parlare:
Per il momento ho chiamato solo la funzione che estrae la componente R!!:help:codice:int rows,cols,; unsigned char **img1,**imgR,**imgG,**imgB; unsigned char** allocabuffer(int r, int c); void eliminabuffer(unsigned char **buffer,int r); void readraw(char *filepath,unsigned char **buffer); void readrawR(char *filepath,unsigned char **buffer); void readrawG(char *filepath,unsigned char **buffer); void readrawB(char *filepath,unsigned char **buffer); void saveraw(char *filepath,unsigned char **buffer); FILE *out; main() { int i; rows=240; cols=320; imgR=allocabuffer(rows, cols); readrawR("Immagine.raw",imgR); saveraw("Immagine_R.raw",imgR); eliminabuffer(imgR,rows); } unsigned char** allocabuffer(int r, int c) { int i; unsigned char **buffer=(unsigned char**)malloc(r*sizeof(unsigned char*)); for(i=0;i<r;i++) buffer[i]=(unsigned char*)calloc(c,sizeof(unsigned char)); return (buffer); } // readraw RGB void readrawR(char *filepath,unsigned char **buffer) { int i; FILE *source=fopen(filepath,"rb"); for(i=0;i<rows*cols*3;i+3) fread(buffer[i],1,1,source); fclose(source); } void readrawG(char *filepath,unsigned char **buffer) { int i; FILE *source=fopen(filepath,"rb"); for(i=1;i<rows;i+3) fread(buffer[i],1,cols,source); fclose(source); } void readrawB(char *filepath,unsigned char **buffer) { int i; FILE *source=fopen(filepath,"rb"); for(i=2;i<rows;i+3) fread(buffer[i],1,cols,source); fclose(source); } void eliminabuffer(unsigned char **buffer,int r) { int i; for(i=0;i<r;i++) free(buffer[i]); free(buffer); } void saveraw(char *filepath,unsigned char **buffer) { int i; FILE *source=fopen(filepath,"wb"); for(i=0;i<rows;i++) fwrite(buffer[i],1,1,source); fclose(source); }

:
Rispondi quotando
