#include #include #include #include "varios.hpp" Cor_rgb::Cor_rgb(int _r, int _g, int _b) { r= Acerta(_r); g= Acerta(_g); b= Acerta(_b); } void Cor_rgb::read( FILE *fp ) { float _r, _g, _b; fscanf( fp, " %f %f %f ", &_r, &_g, &_b ); r= Acerta((int)_r); g= Acerta((int)_g); b= Acerta((int)_b); } unsigned char Cor_rgb::Acerta(int x) { if ( x<0 ) return (unsigned char)0; if ( x>255 ) return (unsigned char)255; return (unsigned char)x; } void Cor_rgb::Atribui(int _r, int _g, int _b) { r= Acerta(_r); g= Acerta(_g); b= Acerta(_b); } void Cor_rgb::Copia(Cor_rgb origem) { r= origem.R(); g= origem.G(); b= origem.B(); } void Cor_rgb::Multiplica(float ind) { r = Acerta( (int) ( (float) r * ind ) ); g = Acerta( (int) ( (float) g * ind ) ); b = Acerta( (int) ( (float) b * ind ) ); } void Cor_rgb::Indexa(Cor_rgb indice) { r = Acerta( (int) ( (float) r * ( (float) indice.R() / 255 ) ) ); g = Acerta( (int) ( (float) g * ( (float) indice.G() / 255 ) ) ); b = Acerta( (int) ( (float) b * ( (float) indice.B() / 255 ) ) ); } void Cor_rgb::Soma(Cor_rgb outra) { int t; t = outra.R() + (int)r; r = Acerta( t ); t = outra.G() + (int)g; g = Acerta( t ); t = outra.B() + (int)b; b = Acerta( t ); } // implementação da imagem Imagem::Imagem( char *file_name ) { FILE *fp; char line[80]; unsigned char pixel[3]; int i,j,k,max; pixels = NULL; fp = fopen(file_name, "rb"); if (fp == NULL){ printf("could not read from %s",file_name); return; } fgets(line,80,fp); if(strcmp(line,"P6\n")) { return; } while (fscanf( fp, " %d ", &w ) != 1) fgets(line, 80, fp); while (fscanf( fp, " %d ", &h ) != 1) fgets(line, 80, fp); while (fscanf( fp, " %d", &max ) != 1) fgets(line, 80, fp); fgetc(fp); pixels = new Cor_rgb [w*h]; //le invertendo as linhas: for ( i=h-1; i>=0; i-- ) for ( j=0; j=0; i-- ) for ( j=0; j