Ir al contenido


Foto

[Truco Delphi] Intensidad de un Color por Porcentaje ?


  • Por favor identifícate para responder
1 respuesta en este tema

#1 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 17 agosto 2016 - 04:33

 [Truco Delphi] Intensidad de un Color por Porcentaje ?

 

Descripcion:

Bloque de codigo que contiene 2 funciones para dar o quitar intensidad por un porcentaje a un Color especificado.


delphi
  1. //Color mas Oscuro
  2. function Dark(Col: TColor; Percent: Byte): TColor;
  3. var R, G, B: Byte;
  4. begin
  5. R := GetRValue(Col);
  6. G := GetGValue(Col);
  7. B := GetBValue(Col);
  8. R := Round(R*Percent/100);
  9. G := Round(G*Percent/100);
  10. B := Round(B*Percent/100);
  11. Result := RGB(R, G, B);
  12. end;
  13.  
  14. //Color mas Claro
  15. function Light(Col: TColor; Percent: Byte): TColor;
  16. var R, G, B: Byte;
  17. begin
  18. R := GetRValue(Col);
  19. G := GetGValue(Col);
  20. B := GetBValue(Col);
  21. R := Round(R*Percent/100) + Round(255 - Percent/100*255);
  22. G := Round(G*Percent/100) + Round(255 - Percent/100*255);
  23. B := Round(B*Percent/100) + Round(255 - Percent/100*255);
  24. Result := RGB(R, G, B);
  25. end;


  • 3

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 agosto 2016 - 06:17

Yo también he usado este algoritmo, con alguna pequeña variación... pero en escencia es similar y análogo.

Y estuve pensando en la forma de encararlo por el lado del brillo y no la intensidad. La cosa es que es un tanto más complicado hacerlo por esa vía ya que primero se debe corregir el valor gamma, y luego recién aplicar esta fórmula:

 

Y = 0.2126 * R  + 0.7152 * G + 0.0722 * B

 

Y esto es sólo el primer paso, que es para obtener el brillo o luminicencia relativa. Lo que sigue es mi pregunta... bueno, tenemos un valor Y pero si ahora quisiera aplicarle un porcentaje ¿cómo hago los pasos inversos?

 

Al final descarté esa funcionalidad en mi mini framework, tratando de encontrar una forma relativamente más directa que haga esto.

 

No he vuelto a tocar el tema, pero creo que no hay forma más directa de encararlo que pasar del RGB a HSL y ahí probar cambiar el porcentaje de L, y volver de nuevo a RGB. No he probado esta alternativa, o si es el método correcto (no descarto que debiera aplicarse alguna ligera compensación entre H y S si se alterara significativemnte el L en forma porcentual).

 

Tengo un poco oxidada la teoría sobre el espacio de color como para volver al ruedo.

 

EDITO:

Pues una pequeña prueba en Paint bastó para sacarme la duda y efectivamente no hace falta tocar el H o S. Basta con modificar L.

 

Saludos,


  • 0




IP.Board spam blocked by CleanTalk.