Exemple #1
0
int main() {
	FILE *input, *output;
	BMP bmp;
	int error;
	Color blue = {255, 0, 0};
	char nombre[50];
	scanf("%s",nombre);
	strcat(nombre,".bmp");
	printf("%s",nombre);
	input = fopen(nombre, "rb");
	error = 0;
	bmp = readBMP(input, &error);

	if (!error) {
		output = fopen("salida.bmp", "wb");

		flipBMP(&bmp);
		//greyscaleBMP(&bmp);
		tintBMP(&bmp, blue);

		writeBMP(bmp, output);
		freeBMP(&bmp);
		fclose(output);
	}
	else {
		puts("error al leer archivo");
	}

	fclose(input);
}
Exemple #2
0
int main()
{  
	 
	///lectura de imagen
	char carName[50];
	printf("\n Introduzca el nombre de la imagen extension *BMP (ej:lena.bmp) : \n");
	scanf("%s", carName);

	IMAGE *img;
	//el formato de entrada de la imagen es nombre.extención, para este caso solo lee imagenes BMP.
	loadBMP(carName, &img);//el formato de entrada de la imagen es nombre.extención, para este caso solo lee imagenes BMP.
	//variables de entrada a la funcion
	uint8_t Rpixel;
	uint8_t Bpixel;
	uint8_t Gpixel;
	uint8_t maxi;
	uint8_t mini;
	float filtro;
	float H;
	float sat;
	int i;
	float *x;
	

	//recorriendo la imagen
	for (i = 0; i < img->width*img->height; i++) {
		Rpixel=(uint8_t)img->data[i].r;
		Bpixel=(uint8_t)img->data[i].b;
		Gpixel=(uint8_t)img->data[i].g;

		// se definen las funciones max y min para el calculo de los canales hsv
		maxi = (uint8_t)maxim(Rpixel, Gpixel, Bpixel);
		mini = (uint8_t)minim(Rpixel, Gpixel, Bpixel);
		sat = Saturacion(maxi, mini);//calculo de la saturacion del pixel
		H =Color(maxi,mini,Rpixel, Gpixel, Bpixel);//calculando canal de color H
		filtro=FiltroExperimental(H,sat,(float)(maxi)/255);//definiendo filtro multiplicador de color

		//retornando de hsv a rgb
		x=ConvHsvRgb(filtro*H,sat,(float)(maxi)/(255));

		//salida a imagen 
		img->data[i].r = x[1];
		img->data[i].g = x[2];
		img->data[i].b = x[3];
		}
	

	writeBMP("img.bmp", img); //guardado de imagen
	freeBMP(img);// libera memoria de la imagen.
	free(img);
	return 0;
}