convertir color a hexadecimal

270 views
Skip to first unread message

Miguel Canchas

unread,
Apr 10, 2014, 11:12:21 AM4/10/14
to publice...@googlegroups.com

Como convertir un RGB(100,20,120) a Hexadecimal…

 

0x00FFFF   esto es amarillo

0xFF0000   esto es azul

 

Y asi…

 

Busque en el portal del pueblo y no encuentro uno que se adecue, y eso que probe con 5 de ellos…

 

MK

Jose Antonio Blasco

unread,
Apr 10, 2014, 11:26:27 AM4/10/14
to Comunidad de Visual Foxpro en Español
Revisa estas funciones del maestro Luis María Guayán


*Conversión de decimal a hexadecimal
*Autor: Luis Maria Guayán 
*------------------------------------------------
FUNCTION _Dec2Hex(nDecimal)
*------------------------------------------------
* Transforma un número decimal a hexadecimal
* USO: _Dec2Hex(nDecimal)
* RETORNA: Caracter
*------------------------------------------------
  LOCAL lcHexa, lcChr, lnResto
  lcHexa=''
  DO WHILE nDecimal > 0
    lnResto = MOD(nDecimal,16)
    nDecimal = INT(nDecimal / 16)
    lcChr = IIF(lnResto < 10,STR(lnResto,1),CHR(lnResto + 55))
    lcHexa = lcChr + lcHexa
  ENDDO
  RETURN lcHexa
ENDFUNC
*********************************************************************************************** 

*Conversión de hexadecimal a decimal
*Autor Luis Maria Guayán 
*------------------------------------------------
FUNCTION _Hex2Dec(cHexa)
*------------------------------------------------
* Transforma un número hexadecimal a decimal
* USO: _Hex2Dec(cHexadecimal)
* RETORNA: Numérico
*------------------------------------------------
  LOCAL lnFinal, lnDecimal, lnI, lnPeso, lnAsc
  cHexa = UPPER(ALLTRIM(cHexa))
  lnFinal = LEN(cHexa)
  lnDecimal = 0
  FOR lnI = lnFinal TO 1 STEP -1
    lnAsc = ASC(SUBS(cHexa,lnI,1))
    lnPeso = IIF(BETWEEN(lnAsc,48,57),lnAsc-48,lnAsc-55)
    lnDecimal = lnDecimal + lnPeso * 16^(lnFinal - lnI)
  ENDFOR
  RETURN lnDecimal
ENDFUNC
***********************************************************************************************

*Conversión de decimal a binario
*Autor: Luis Maria Guayán 
*------------------------------------------------
FUNCTION _Dec2Bin(nDecimal)
*------------------------------------------------
* Transforma un número decimal a binario
* USO: _Dec2Bin(nDecimal)
* RETORNA: Caracter
*------------------------------------------------
  LOCAL lcBinario, lnResto
  lcBinario = ''
  DO WHILE nDecimal > 0
    lnResto = MOD(nDecimal,2)
    nDecimal = INT(nDecimal / 2)
    lcBinario = STR(lnResto,1) + lcBinario
  ENDDO
  RETURN lcBinario
ENDFUNC
***********************************************************************************************

*Conversión de binario a decimal
*Autor: Luis Maria Guayán 
*------------------------------------------------
FUNCTION _Bin2Dec(cBinario)
*------------------------------------------------
* Transforma un número binario a decimal
* USO: _Bin2Dec(cBinario)
* solo "1's" y "0's"
* RETORNA: Numérico
*------------------------------------------------
  LOCAL lnFinal, lnDecimal, lnI
  cBinario = ALLTRIM(cBinario)
  lnFinal = LEN(cBinario)
  lnDecimal = 0
  FOR lnI = lnFinal TO 1 STEP -1
    lnDecimal = lnDecimal + ;
      VAL(SUBS(cBinario,lnI,1)) * 2^(lnFinal - lnI)
  ENDFOR
  RETURN lnDecimal
ENDFUNC
***********************************************************************************************

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2

"No hay camino hacia la libertad, la libertad es el camino" - Indira Gandhi
“Nunca te olvides de sonreír, porque el día que no sonrías  será un día perdido”  -  Charles Chaplin
“Todo el mundo quiere tener un amigo, pero pocos se toman la molestia de ser uno”
- Anónimo

Luis Maria Guayan

unread,
Apr 10, 2014, 11:34:59 AM4/10/14
to publice...@googlegroups.com
Esta función de PortalFox es similar

-- Convertir el número de color a un formato válido para HTML --
http://www.portalfox.com/article.php?sid=534

y con unas pequeñas modificaciones retorna lo que tu deseas:

? _Col2Hexa(GETCOLOR())
? _Col2Hexa(RGB(100,20,120))
? _Col2Hexa(16711680) && azul
? _Col2Hexa(65535) && amarillo

*------------------------------------------------
FUNCTION _Col2Hexa(tnColor)
*------------------------------------------------
  LOCAL lcHTML, ln
  lcHTML = ""
  FOR ln = 1 TO 3
    lcHTML = RIGHT(TRANS(tnColor%256,"@0"),2) + lcHTML
    tnColor = INT(tnColor/256)
  ENDFOR
  RETURN "0x" + lcHTML
ENDFUNC
------------------------------------------------


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Foxero

unread,
Apr 10, 2014, 11:45:54 AM4/10/14
to publice...@googlegroups.com, mcan...@ximesa.com
Hola

Aparentemente, el valor en decimal de tus ejemplos no corresponde al orden comunmente aceptado de colores: RGB que significa Red Green Blue,
pues el amarillo en hexa bajo el estandar RGB seria 0xFFFF00 (el amarillo se obtiene de la sistensis aditiva de los colores Red y Green. En tus ejemplos  pareces estar usando un orden Blue, Red, Green.

Para convertie un color RGB solo debes convertir el valor  de cada color basico (0 a 255 para cada color)  a su codigo hexadeimal  (00 a FF para cada color) y despues ponerlos juntos en el orden en que los usaras en hexadecimal, lo mas comun es que sea en orden RGB (rojo, verde, azul) pero si lo requieres en orden BRG (azul, rojo,verde) pues pones los valores hexa en ese orden.

Saludos
David

Miguel Canchas

unread,
Apr 10, 2014, 12:20:35 PM4/10/14
to publice...@googlegroups.com

Excelente ¡!!! GRACIAS…

 

MK

Foxero

unread,
Apr 11, 2014, 2:06:54 PM4/11/14
to publice...@googlegroups.com, mcan...@ximesa.com
Perdon, debe decir "...el valor en hexadecimal de tus ejemplos..."  en vez de "...el valor en decimal de tus ejemplos..."
saludos
david
Reply all
Reply to author
Forward
0 new messages