ColorToRGB (VFP)

From codeWiki
Jump to: navigation, search

Por: VictorEspina

VFP contiene una función nativa para obtener el valor numérico de un color a partir de sus componentes Rojo, Verde y Azul. Esta función se llama RGB() y su sintáxis es:

nColor = RGB(rojo,verde,azul)


Cada valor para los componentes Rojo, Verde y Azul puede ir desde cero (ausencia de ese color en particular) hasta 255 (maxima saturacion del color).

Lo que no ofrece VFP es una forma de conocer los valores individuales de cada color a partir del valor numérico del color obtenido con RGB. La función ColorToRGB() hace exactamente esto:

* ColorToRGB
* Devuelve un objeto con los componentes
* individuales de un color dado
*
FUNCTION ColorToRGB(pnColor)
 *
 LOCAL oRGB
 oRGB=CREATEOBJECT("Custom")  
 oRGB.AddProperty("Red",0)
 oRGB.AddProperty("Green",0)
 oRGB.AddProperty("Blue",0)
 oRGB.AddProperty("StringValue","")
 
 LOCAL nExp,nBase,nRest,nValue
 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
 
 oRGB.Red = aValues[1]
 oRGB.Green = aValues[2]
 oRGB.Blue = aValues[3]
 oRGB.StringValue = ALLT(STR(oRGB.Red))+","+ALLT(STR(oRGB.Green))+","+ALLT(STR(oRGB.Blue))
 
 RETURN oRGB
 *
ENDFUNC


LOCAL nColor
nColor = RGB(255,240,40)

LOCAL oRGB
oRGB = ColorToRGB(nColor)
?oRGB.Red   --> 255
?oRGB.Green --> 240
?oRGB.Blue  --> 40
?oRGB.StringValue --> "255,240,40"
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox