convertir long a rgb

Iniciado por <[(x)]>, 27 Febrero 2009, 22:03 PM

0 Miembros y 1 Visitante están viendo este tema.

<[(x)]>



holas
 
Armando una app estoy necesitando convertir un color en formato long a rgb.

hasta hay todo bien pero cuando voy a la practica.

Este es el code que uso

Código (vb) [Seleccionar]

  Azul = (Color And 16711680) / 65536
  Verde = (Color And 65280) / 256
  Rojo = Color And 255


  Dando le a 'Color' el valor '&H8000000F',
  'Azul' queda con el valor '0'
  'Verde ' queda con el valor '0'
  'Rojo' queda con el valor '15'
   
que pasa, este color es kasi un negro y el color   '&H8000000F', no

lo que necesito es algún método que funcione bien ..
espero no haber sido muy cargoso y gracias por la atención.

<[(x)]>

LeandroA

   lB = (lColor And &HFF0000) \ &H10000
   lG = (lColor And &HFF00&) \ &H100
   lR = (lColor And &HFF)

<[(x)]>

#2
Graciass  LeandroA

Seguí buscando (como siempre) y encontré estop.

Código (vb) [Seleccionar]



'in VB, a long integer representing color is created from RGB values:
Color = *   &FF00&    +    G  * &HFF&    +    R
'or this without Hex notation
Color = (256 * 256 * B)  + G * 256 + R

'the bult-in VB function RGB can calculate the Long value for you
Color = RGB (R,G,B)

'to get the RGB from a long
Function Color_to_RGB (Color As Long , R As Integer , G As Integer , B As Integer ) As Long
  R = Color And &HFF&                                     
  G = (Color And &HFF00&) \ &H100&               
  B = (Color & And &HFF0000) \ &H10000         
  'or
  R = Color Mod 256
  G = (Color \ 256 ) Mod 256
  B = (Color \ 256 \ 256 ) Mod 256
End Function

'in VB colors > &H80000000 are systems colors - which must be
'interpreted by VB - they are not standard Long color values!
'use the GetSysColor API to return the true long value of a system color
Private Declare GetSysColor Lib "user32" ( ByVal nIndex As Long ) As Long
iColor = GetSysColor (iColor And &HFFFFFF)

'values of R, G, B can be used to  as BBGGRR to form a hex representation of a color that VB understands
'so, for R = "F0",  G="A3, and B = "2F, the hex representation in VB becomes BBGGRR:
&H2FA3F0

'to get the VB hex string for a color from the Long or RGB
VBColorHexString = Right$( "000000" & Hex $( Color), 6)
VBColorHexString = Right$( "000000" & Hex $( R + 256 * (G + 256 * B ), 6)

'Note:  The Internet and other applications use RRGGBB for the hex format of a color
WebColorHexString = Right$( "000000" & Hex $( B + 256 * (G + 256 * R ), 6)

'to get the Web hex color string from the VB hex color string, swap the first 2 and last 2 character strings
WebColorHexString = Right$(VBHexColorString, 2) & Mid $(VBColorHexString, 3, 2) & Left$(VBHexColorString, 2)



  Fuente  no hay mucho mas.
<[(x)]>

hechelion

me alegro que encontraras la solución a tu problema, pero si te das cuenta en tu primer post el valor
&H8000000F no es un color RGB y de ahí que cuando intentas pasarlo por la función RGB que creaste te de un valor completamente distinto.

incluso, en el código que posteas sale perfectamente explicado:

'in VB colors > &H80000000 are systems colors - which must be   
'interpreted by VB - they are not standard Long color values!   
'use the GetSysColor API to return the true long value of a system color