Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2011
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Poder: 19
MaxiDucoli Va por buen camino
Exclamation Cambiar color de imagen

Hola a tod@s como están?
Bueno, yo acà molestando de nuevo con mi ignorancia

Mi problema es el siguiente:

Quisiera saber como hago para cambiar mediante código el color de un PNG, o sea, como està hecho en la imagen descriptiva de abajo.
Tengo entendido que para hacer algo asi se cambian el color "Base" solamente y de ahi se obtiene el grafico exactamente igual pero con otro color.
Lo que estoy tratando de hacer es un Front End para un programa que hace temas de android y me gustaria ponerle un form con una especie de editor grafico que haga eso.

Estuve mirando en el foro y en google y las funciones que encuentro hacen algo similar, pero me dejan con el mismo tono toda la imagen, o sea el azul es azul y no tiene esos detalles blancos, como de brillo.
Alguien entiendo mas o menos de graficos y puede explicarme como hacerlo?
Muchas gracias a tod@s por el interés de ante mano!
Saludos!!!

Responder Con Cita
  #2  
Antiguo 24-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
La verdad es que no lo he probado, pero yo haría un test sencillo.

Recorre los pixels de la imagen (alto y ancho) y cambia los valores de color de cada pixel. Básicamente puedes variar los valores RGB o HLS. Revisa la unit GraphUtil, y verás que hay funciones como:
  • ColorRGBToHLS
  • ColorHLSToRGB
  • ColorAdjustLuma
  • HueToRGB
  • GetHighLightColor
  • GetShadowColor
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 26-11-2011
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Poder: 19
MaxiDucoli Va por buen camino
Question

Cita:
Empezado por Neftali Ver Mensaje
La verdad es que no lo he probado, pero yo haría un test sencillo.

Recorre los pixels de la imagen (alto y ancho) y cambia los valores de color de cada pixel. Básicamente puedes variar los valores RGB o HLS. Revisa la unit GraphUtil, y verás que hay funciones como:
  • ColorRGBToHLS
  • ColorHLSToRGB
  • ColorAdjustLuma
  • HueToRGB
  • GetHighLightColor
  • GetShadowColor
Me siento muy estúpido preguntándote esto, pero no se como hacer.
Mirá, yo lo tengo así:

if Sender Is TShape then Col := TShape(Sender).Brush.Color; // Si hago click en el TShape me cambia el color.
ColorRGB := GetRValue(Col) + GetGValue(col) + GetBValue(Col); // Cargo la variable con el color del TShape.
FOR j := 0 TO PNG.Height-1 DO
BEGIN
FOR i := 0 TO PNG.Width-1 DO
BEGIN
// ColorRGB := GetRValue(PNG.Canvas.Pixels[i,j]) + GetGValue(PNG.Canvas.Pixels[i,j]) + GetBValue(PNG.Canvas.Pixels[i,j]);
IF PNG.Canvas.Pixels[i,j] <> ClBlack THEN ColorRGBToHLS(PNG.Canvas.Pixels[i,j],H,L,S); // Este lo seteo con variables WORD y con valores H = 120 - L = 20 - S = 50;
END
END;

Pero al cargar la imagen no me hace nada (obvio que salvo antes de cargarla)

Podrías darme "una linea" de como hacerlo por favor??
Responder Con Cita
  #4  
Antiguo 28-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Te adjunto una pequeña prueba que cambia los componentes de color de una imagen. Es muy simple. Captura cada uno de los pixels de una imagen y modifica en un porcentaje cada unos de los componentes (red, green, blue).

Puedes utilizar las funciones que te comenté para realizar otras transformaciones, de forma similar. Una vez que lo tengas se pueden realizar optimizaciones, por ejemplo usando ScanLine.

El código de modificación sería algo así:

Código Delphi [-]
procedure TForm6.TrackBar1Change(Sender: TObject);
var
  i,j:integer;
  col, nCol:TColor;
  bmp:TBitmap;
  rval, gval, bval:integer;
begin

  // Creamos un BMP para utilizarlo en las transformaciones
  bmp := TBitmap.Create;
  try
    // Asignamos el contenido
    bmp.Assign(Image1.Picture.Graphic);
    // Asignar al BMP a la segunda imagen (hará de previsualización)
    Image2.Picture.Assign(bmp);

    // Recorridos a lo ancho y alto
    for i := 0 to ((bmp.Canvas.ClipRect.Right - bmp.Canvas.ClipRect.Left) - 1) do begin
      for j := 0 to ((bmp.Canvas.ClipRect.Bottom - bmp.Canvas.ClipRect.Top) - 1) do begin

        // Color actual
        col := bmp.Canvas.Pixels[i, j];
        // Extraemos los componentes de cada pixel
        rval := GetRValue(Col);
        gval := GetGValue(col);
        bval := GetBValue(Col);

        // Aplicamos el cambio segun cada trackbar
        rval := round(rval * (TrackBar1.Position / 100));
        gval := round(gval * (TrackBar2.Position / 100));
        bval := round(bval * (TrackBar3.Position / 100));

        // Color con los cambios
        nCol := RGB (rval, gval, bval);
        // Asignamos el nuevo colo
        bmp.Canvas.Pixels[i, j] := nCol;

      end;
    end;
  finally

    // Asignamos el resultado
    Image2.Picture.Graphic.Assign(bmp);
    // Y liberamos
    FreeAndNil(bmp)
  end;
end;
Archivos Adjuntos
Tipo de Archivo: zip Test_Change_Color.zip (3,4 KB, 43 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



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
Como Cambiar El Color De Fondo En Una Imagen kurono Varios 2 27-11-2011 13:53:41
Cambiar RGB de un color delphiladero Gráficos 12 26-06-2010 06:30:18
Cambiar color de letras de acuerdo al color de fondo Adrian Murua OOP 2 15-11-2008 18:36:21
Mantener color verde olivo de las ventanas, al cambiar el color en windows mancurnino Varios 6 11-03-2008 15:39:47
Cambiar el color de una imagen inter_mercadeo Gráficos 2 25-02-2005 18:36:54


La franja horaria es GMT +2. Ahora son las 16:35:33.


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