Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
[SOLUCIONADO] Extraer Propiedades De Un Color
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje [SOLUCIONADO] Extraer Propiedades De Un Color 
 
Hola de nuevo, compañeros.

Pues se trata de eso, del asunto. Cómo obtener Rojo, Azul, Verde, Luminancia, Matiz, Saturación y Valor a partir de un entero que representa un color.

Veo que se puede hacer con Colorinfo, aunque la ayuda de éste dice que es más rápido con SetHSV o SetRGB. Primero, que Colorinfo no admite un entero como argumento, sino un color. Pero para obtener un color tengo que separar el entero en sus componentes RGB o HSV. Segundo, SetHSV o SetRGB no devuelve estos valores. Creo.

En fin, lo estoy haciendo así para RGB y Luminancia:
  Dim bRojo As Byte
  Dim bVerde As Byte
  Dim bAzul As Byte
  Dim bLuminancia As Byte
  
  bRojo = (Colorfondo And &FF0000) / 256 / 256 ' 65536
  bVerde = (Colorfondo And &H00FF00) / 256
  bAzul = Colorfondo And &FF
  
  bLuminancia = 0.299 * bRojo + 0.587 * bVerde + 0.114 * bAzul


Pero no sé cómo hacerlo para HSV.

¿Cómo solucionarlo para HSV?¿Hay alguna función de color que resuelva todo esto sin tanta parafernalia?

Gracias de antemano.
 



 
última edición por Grandamakulo el Lunes, 02 Septiembre 2019, 21:02; editado 2 veces 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Extraer Propiedades De Un Color 
 
¿Has explorado la clase Color? Dispones de los métodos RGB, setRGB, HSV, setHSV, setAlpha  otros.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Extraer Propiedades De Un Color 
 
Grandamakulo escribió: [Ver mensaje]
Colorinfo no admite un entero como argumento, sino un color.


Siempre se puede rapresentar un "Color" por un entero y viceversa.

Exemplum:
Public Sub Form_Open()

  Dim ci As ColorInfo
  
   With ci = Color[&123456]
    Print .Red
    Print .Green
    Print .Blue
    Print .Alpha
    Print Hex(.Color, 6)
    Print .Hue
    Print .Saturation
    Print .Value   ' Este se refiere al valor del componente "V" de la representación HSV del color
    Print .Luminance
  End With
  
  Label1.Background = &123456

End



Página sugerida:
https://www.gambas-it.org/wiki/inde...lasse_ColorInfo
 



 
última edición por vuott el Lunes, 02 Septiembre 2019, 10:39; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Extraer Propiedades De Un Color 
 
Hola, de nuevo:
Shordi, sí, la había explorado, lo mismo que ColorInfo.
Voutt, como dijo el dramaturgo, «el dedo en la llaga con gran tino puesto habéis...». Efectivamente, eso es. Mi problema es que usaba mal ColorInfo, al que le pasaba directamente el entero en lugar de a través de un «Color».
¡Perfectamente solucionado!
Muchas gracias.
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] Extraer Propiedades De Un Color 
 
PS.—¿Y para qué, os preguntaréis, querría este hombre tales cosas? Pues para buscar un color de tinta que sea legible en un fondo cualquiera. Esto es, se cambia el color de un control durante la ejecución de un programa y el texto que aparece puede, o no, leerse. Para evitar dejarse la vista en esas letras poco legibles está este código:
Public Function TintaxContraste(Colorfondo As Integer, booTotal As Boolean) As Integer

  ' Esta función devuelve un color de tinta que sea contrastante con un color de fondo y
  ' que resulte legible.
  '<<<<< Colorfondo: El color sobre el que hay que escribir
  '      booTotal: Si, devuelve blanco o negro, según la luminancia;
  '                No, devuelve un color con el matiz girado 60º en la rueda cromática.
  '>>>>> Devuelve el color de tinta adecuado para ese fondo
  
  Dim ci As ColorInfo
  Dim bMatiz As Byte
  Dim bSatur As Byte
  Dim bValor As Byte
  Dim bLumin As Byte
  
  ci = Color[Colorfondo]
  If booTotal = Si Then
      bLumin = ci.Luminance
      If bLumin > 128 Then
          Return Color.Black
        Else
          Return Color.White
      Endif
    Else
      bMatiz = ci.Hue
      bSatur = ci.Saturation
      bValor = ci.Value

      ' 60 / 360 * 256 = 43, esto gira 60º el color en la rueda de matiz
      ' Si pasa de 255, auntomáticamente se reinicia, por lo que no es necesario
      ' control de exceso.
      bMatiz = bMatiz + 43
      bValor = bValor + 85
  
      Return Color.HSV(bMatiz, bSatur, bValor)
  Endif

End

 



 
última edición por Grandamakulo el Martes, 03 Septiembre 2019, 19:59; editado 3 veces 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] Extraer Propiedades De Un Color 
 
Muy bueno, sí señor. A fé mía que me viene bien. Gracias por compartir.

   
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] Extraer Propiedades De Un Color 
 
Grandamakulo escribió: [Ver mensaje]


  ' Esta función devuelve un color de tinta que sea contrastante con un color de fondo y
  ' que resulte legible.


Pues vaya !!!

Parece interesante, me lo quedo, muchas gracias.  
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] Extraer Propiedades De Un Color 
 
He modificado ligeramente el algoritmo original, variando también «Valor» porque no me gustaba demasiado el resultado.

He aquí una muestra sobre un «TreeView» del «Total B/N» y del «matizado» —booTotal=Si y booTotal=No—, repectivamente:


 boototalsi

 boototalno
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] Extraer Propiedades De Un Color 
 
Grandamakulo escribió: [Ver mensaje]
He modificado ligeramente el algoritmo original, variando también «Valor» porque no me gustaba demasiado el resultado.

He aquí una muestra sobre un «TreeView» del «Total B/N» y del «matizado» —booTotal=Si y booTotal=No—, repectivamente:



Desde luego se nota la diferencia a mejor.

Pero esa ligera mejora, ¿esta publicada en el código o no?
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] Extraer Propiedades De Un Color 
 
gambafeliz escribió: [Ver mensaje]


Pero esa ligera mejora, ¿esta publicada en el código o no?


Sí, he editado la entrada, por lo que está actualizado.
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron