PDA

Ver la Versión Completa : Warning en asignación de TColor a Integer


fasthorse
04-05-2008, 12:11:10
Mirad, una función para pasar a blanco y negro, pero me pone la imagen en tonos rojos, en vez del blanco y negro...

for(int k=0;k<Imagen->Height;k++)
{
for(int l=0;l<Imagen->Width;l++){
int TheRGBValue = ColorToRGB(Imagen->Canvas->Pixels[k][l]);
Imagen->Canvas->Pixels[k][l]=(GetRValue(TheRGBValue)+GetGValue (TheRGBValue)+GetBValue(TheRGBValue))/3;
}
}

ME da un Warning que dice que hay una asignación de TColor a int, será cuando asigno el canvas->Pixels a los colores... puede ser que esté mal la asignación? y si es así, ¿cómo le asigno el nuevo color a la imgane??

Muchas gracias.
Saludos.

xEsk
04-05-2008, 18:21:07
En delphi existe la función RGB() que convierte a TColor. Así que en C++ Builder debería existir también esta función.

Saludos.

fasthorse
04-05-2008, 20:00:44
ok, pero entonces cuando asigno:
Imagen->Canvas->Pixels[k][l]=(GetRValue(TheRGBValue)+GetGValue (TheRGBValue)+GetBValue(TheRGBValue))/3;

tengo que convertir Imagen->Canvas->Pixels[k][l] a TColor????

Saludos.

escafandra
05-05-2008, 01:51:35
Efectivamente, las API que usaste para aislar los componentes de color, devuelven un Byte. C es muy estricto con los tipos, por lo que te avisa de una conversión no ortodoxa pero no es un error ya que TColor es en realidad un int. Debes hacer la conversión explicita a TColor para evitar el aviso. Es recomendable hacerlo así pues evitar posibles errores derivados de una mala conversión de tipos.

Prueba esto:
Byte Tono = (GetRValue(TheRGBValue)+GetGValue(TheRGBValue)+GetBValue(TheRGBValue))/3;
TColor WB = (TColor)RGB(Tono, Tono, Tono);
Imagen->Canvas->Pixels[k][l]=WB;

Saludos.

EDITO:

Por si no comprendiste porqué los tonos eran rojizos, la pega está en asumir el color como (GetRValue(TheRGBValue)+GetGValue(TheRGBValue)+GetBValue(TheRGBValue))/3; esto es un byte que al asimilarlo a color sólo tiene componente rojo. De aquí que debas hacer RGB(Tono, Tono, Tono);

fasthorse
05-05-2008, 09:28:14
ok, muchisimas gracias, ya me salió, y si ahora quiero volver a poner la imagen en sus colores originales??

Saludos.

escafandra
05-05-2008, 13:46:32
Pues... No puedes volver a los colores originales a no ser que tengas una copia de la imagen original.

En algunas imágenes tipo *.bmp que no son de 24 bits (por pixel), es decir de 256 colores, 16, 8 o menos colores, éstos se guardan en una paleta en el mismo archivo. Cambiando la paleta y guardando la original, si podrías hacerlo.

Revisa esos tipos de gráficos y los Dib de Windows. Para windows todo gráfico es un Dib y estos pueden tener o no paleta, dependiendo de la profundidad de color usada.

Si la profundidad de color es 24 bits, no tenemos paleta y la única opción es guardar toda la imagen para recuperar los colores originales.

Saludos.

fasthorse
06-05-2008, 19:14:53
ok, muchas gracias, pensé que habría alguna forma, volviendo a cambiar los píxeles, lo miraré tal cual me comentas.

Gracias, y saludos.