![]() |
Cambiar color de imagen
Hola a tod@s como están?
Bueno, yo acà molestando de nuevo con mi ignorancia :p 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!!! ![]() |
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:
|
Cita:
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) :p Podrías darme "una linea" de como hacerlo por favor?? |
1 Archivos Adjunto(s)
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í:
|
| La franja horaria es GMT +2. Ahora son las 15:13:13. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi