Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2008
fasthorse fasthorse is offline
Miembro
 
Registrado: ene 2007
Posts: 90
Poder: 18
fasthorse Va por buen camino
Warning en asignación de TColor a Integer

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.
Responder Con Cita
  #2  
Antiguo 04-05-2008
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 04-05-2008
fasthorse fasthorse is offline
Miembro
 
Registrado: ene 2007
Posts: 90
Poder: 18
fasthorse Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 05-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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:
Código:
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);

Última edición por escafandra fecha: 05-05-2008 a las 08:13:58.
Responder Con Cita
  #5  
Antiguo 05-05-2008
fasthorse fasthorse is offline
Miembro
 
Registrado: ene 2007
Posts: 90
Poder: 18
fasthorse Va por buen camino
ok, muchisimas gracias, ya me salió, y si ahora quiero volver a poner la imagen en sus colores originales??

Saludos.
Responder Con Cita
  #6  
Antiguo 05-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #7  
Antiguo 06-05-2008
fasthorse fasthorse is offline
Miembro
 
Registrado: ene 2007
Posts: 90
Poder: 18
fasthorse Va por buen camino
ok, muchas gracias, pensé que habría alguna forma, volviendo a cambiar los píxeles, lo miraré tal cual me comentas.

Gracias, y saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
String a TColor mr_pascale Gráficos 4 21-02-2008 18:32:59
ColorToRGB para un TColor de 16 bits. kotai Gráficos 2 09-03-2007 20:45:00
convertir un string a tColor Manuel Varios 2 19-08-2006 19:58:24
WARNING. Duplicate resource(s) Perio Varios 4 08-11-2005 14:25:08
Warning Salomon Varios 2 05-04-2004 19:53:23


La franja horaria es GMT +2. Ahora son las 10:46:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi