Busco función que transforme un color en formato Hexadecimal a Rgb

334 views
Skip to first unread message

José Luis

unread,
May 1, 2012, 12:08:17 PM5/1/12
to Comunidad de Visual Foxpro en Español
Hola,

Ando buscando una función que transforme un color en formato
Hexadecimal a Rgb.

Saludos.

José Luis

Armando Rodríguez Bermúdez

unread,
May 1, 2012, 12:20:07 PM5/1/12
to publice...@googlegroups.com
http://www.javascripter.net/faq/hextorgb.htm

saludos

-----Mensaje original-----
De: publice...@googlegroups.com
[mailto:publice...@googlegroups.com] En nombre de José Luis
Enviado el: martes, 01 de mayo de 2012 11:08 a.m.
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Busco función que transforme un color en formato Hexadecimal a

José Luis

unread,
May 1, 2012, 4:51:03 PM5/1/12
to Comunidad de Visual Foxpro en Español
Pero Armando, eso es Javascript no?

Yo la necesito en vfp

On 1 mayo, 18:20, Armando Rodríguez Bermúdez

Lewis López

unread,
May 1, 2012, 5:11:27 PM5/1/12
to publice...@googlegroups.com
Hola, aqui adjunto esta.



Es una función que hace lo que buscas.

Puedes usarla en un prg o en un procedimiento a nivel de formulario.

FUNCTION RGBcolor 

LPARAMETERS tnDec

lcHex = ""
lnFactor = 24          && establecer un valor del factor de exponente mayor que

FOR lnPos = 6 TO 1 STEP -1
     lnFactor = lnFactor - 4     && disminuir factorial
     lnExp = 2 ^ lnFactor        && extrapolar el poder al lado de dos
     FOR lnOrd = 15 TO 1 STEP -1
          IF tnDec < lnExp            && no value greater than current one,
               lcHex = lcHex + "0"    && so store a zero in this position
               EXIT                   && go back for the next value
          ENDIF
          IF tnDec >= lnExp * lnOrd  && is value greater than or equal to?
               * find the matching hex value from its ordinal position
               lcHex = lcHex + SUBSTR('123456789ABCDEF', lnOrd, 1)
               EXIT
          ENDIF
     ENDFOR
     tnDec = tnDec % lnExp     && leave remainder of exponential division
ENDFOR

* reverse the order of the individual color indicators
lcHex = RIGHT(lcHex, 2) + SUBSTR(lcHex, 3, 2) + LEFT(lcHex, 2)

* convert the pairs into decimal values
lnPick = 2          && offset to determine which pair to convert
lcRGB = ""     && start of string delineator

* parse each color indicator and convert to decimal
FOR lnColor = 1 TO 3
     lcHue = SUBSTR(lcHex, (lnPick * lnColor) - 1, 2) && pull out color
     lnMSB = ASC(LEFT(lcHue, 1))     && "Most Significant Bit"
     lnLSB = ASC(RIGHT(lcHue, 1))     && "Least Significant Bit"

     * subtract appropriate value from each to get decimal equivalent
     lnMSB = lnMSB - IIF(lnMSB > 57, 55, 48)
     lnLSB = lnLSB - IIF(lnLSB > 57, 55, 48)

     * then add decimals together
     lcRGB = lcRGB + TRANSFORM( lnMSB * 16 + lnLSB, '999') + ","
ENDFOR

lcRGB = LEFT(lcRGB, LEN(lcRGB) - 1)
Red=VAL(LEFT(lcRGB,ATC(",",lcRGB,1)-1))
Green=VAL(SUBSTR(lcRGB,ATC(",",lcRGB,1)+1,ATC(",",lcRGB,1)-1))
Blue=VAL(SUBSTR(lcRGB,ATC(",",lcRGB,2)+1,ATC(",",lcRGB,1)-1))
CRGB=RGB(Red,Green,Blue)

RETURN CRGB

ENDFUNC 

Saludos.

SOLUCIONES PC & REDES
Desarrollo de Software a la medida
Diseño de planos Arquitectónicos
Venta, reparación y mantenimiento de Computadores.
Lewis Oswaldo López Gómez .
Teg. En obras Civiles.
Analista y Programador de sistemas.
Cel: 311 665 0342
Correo:
Skipe 
asaie2010
Córdoba-Colombia



> Date: Tue, 1 May 2012 13:51:03 -0700
> Subject: [vfp] Re: Busco función que transforme un color en formato Hexadecimal a Rgb
> From: maste...@hotmail.com
> To: publice...@googlegroups.com

Victor Espina

unread,
May 1, 2012, 5:47:09 PM5/1/12
to publice...@googlegroups.com
En codeWiki tienes una funcion para convertir un valor decimal (como el que devuelve RGB()) en un string R,G,B:

Ahora, si tienes el color en forma de string Hex, como por ejemplo "A0A0A0", la forma seria:

cRGB = Color2RGB( EVAL("0x" + cColorHex) )

Saludos

Victor Espina


On Tuesday, May 1, 2012 3:51:03 PM UTC-5, José Luis wrote:
Pero Armando, eso es Javascript no?

Yo la necesito en vfp

On 1 mayo, 18:20, Armando Rodríguez Bermúdez
<armandorodrigu...@hotmail.com> wrote:
> http://www.javascripter.net/faq/hextorgb.htm
>
> saludos
>
> -----Mensaje original-----
> De: publicesvfoxpro@googlegroups.com
> [mailto:publicesvfoxpro@googlegroups.com] En nombre de José Luis

Luis Maria Guayan

unread,
May 1, 2012, 5:56:21 PM5/1/12
to publice...@googlegroups.com
Busca en PortalFox que siempre hay algo ;-)

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


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

Victor Espina

unread,
May 1, 2012, 11:49:24 PM5/1/12
to publice...@googlegroups.com
Y yo que pense que mi rutina era pequena... esta excelente Luis Maria, como siempre.

Saludos

Victor Espina

José Luis

unread,
May 2, 2012, 5:03:15 AM5/2/12
to Comunidad de Visual Foxpro en Español
Hola,

La rutina de Luis Maria no me funcionó, ya la había visto en portalfox
pero creo que no hace lo que yo quería, convertir un color Hexadecimal
d88200 a Rgb 216,130,0
La rutina de Victor si me funcionó y me he permitido modificarla un
poco a mi gusto y entendimiento ya que soy un poco novatillo.
Me pareció que los valores de R y B estaban intercambiados.
Gracias a todos.

------------------------------------------------------------------------------------
* ColorToRGB
* Devuelve un objeto con los componentes
* individuales de un color dado

PARAMETERS pnColor
LOCAL nRed,nGreen,nBlue,nExp,nBase,nRest,nValue,cColorRgb
LOCAL ARRAY aValues[3]
nRest = pnColor
FOR nExp=2 TO 0 STEP -1
nBase = 256 ^ nExp
nValue = INT(nRest / MAX(1,nBase) )
aValues[nExp + 1]=nValue
nRest = nRest - (nValue * nBase)
ENDFOR
nRed = aValues[3]
nGreen = aValues[2]
nBlue = aValues[1]
cColorRgb = "RGB("+ALLT(STR(nRed))+","+ALLT(STR(nGreen))
+","+ALLT(STR(nBlue))+")"
RETURN cColorRgb




On 2 mayo, 05:49, Victor Espina <vespi...@gmail.com> wrote:
> Y yo que pense que mi rutina era pequena... esta excelente Luis Maria, como
> siempre.
>
> Saludos
>
> Victor Espina
>
>
>
>
>
>
>
> On Tuesday, May 1, 2012 4:56:21 PM UTC-5, Luis Maria Guayan wrote:
>
> >  Busca en PortalFox que siempre hay algo ;-)
>
> > -- Convertir el número de color a un formato válido para HTML --
> >http://www.portalfox.com/article.php?sid=534
>
> >  * Luis María Guayán
> > Tucumán, Argentina
> > _________________________
> >http://www.PortalFox.com<http://www.portalfox.com>
> > Nada corre como un zorro
> > _________________________
> > *

Mario López

unread,
May 2, 2012, 8:28:40 AM5/2/12
to Comunidad de Visual Foxpro en Español
@José Luis:

sColor = "d88200"
sColorRGB = ;
TRANSFORM(EVALUATE([0x] + LEFT(sColor,2))) + "," + ;
TRANSFORM(EVALUATE([0x] + SUBSTR(sColor,3,2))) + "," + ;
TRANSFORM(EVALUATE([0x] + RIGHT(sColor,2)))
>>> 216,130,0

HTH
Mario

---
Reply all
Reply to author
Forward
0 new messages