Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: <[(x)]> en 27 Febrero 2009, 22:03 pm



Título: convertir long a rgb
Publicado por: <[(x)]> en 27 Febrero 2009, 22:03 pm


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
  1.  Azul = (Color And 16711680) / 65536
  2.  Verde = (Color And 65280) / 256
  3.  Rojo = Color And 255
  4.  

  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.



Título: Re: convertir long a rgb
Publicado por: LeandroA en 27 Febrero 2009, 23:04 pm
Código:
   lB = (lColor And &HFF0000) \ &H10000
   lG = (lColor And &HFF00&) \ &H100
   lR = (lColor And &HFF)


Título: Re: convertir long a rgb
Publicado por: <[(x)]> en 28 Febrero 2009, 01:21 am
Graciass  LeandroA

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

Código
  1.  
  2.  
  3. 'in VB, a long integer representing color is created from RGB values:
  4. Color = B   *  &FF00&     +   G   * &HFF&   +   R
  5. 'or this without Hex notation
  6. Color = (256 * 256 * B)   + G * 256 + R
  7.  
  8. 'the bult-in VB function RGB can calculate the Long value for you
  9. Color = RGB (R,G,B)
  10.  
  11. 'to get the RGB from a long
  12. Function Color_to_RGB (Color As Long , R As Integer , G As Integer , B As Integer ) As Long
  13.  R = Color And &HFF&                                    
  14.  G = (Color And &HFF00&) \ &H100&              
  15.  B = (Color & And &HFF0000) \ &H10000          
  16.   'or
  17.  R = Color Mod 256
  18.  G = (Color \ 256 ) Mod 256
  19.  B = (Color \ 256 \ 256 ) Mod 256
  20. End Function
  21.  
  22. 'in VB colors > &H80000000 are systems colors - which must be
  23. 'interpreted by VB - they are not standard Long color values!
  24. 'use the GetSysColor API to return the true long value of a system color
  25. Private Declare GetSysColor Lib "user32" ( ByVal nIndex As Long ) As Long
  26. iColor = GetSysColor (iColor And &HFFFFFF)
  27.  
  28. 'values of R, G, B can be used to  as BBGGRR to form a hex representation of a color that VB understands
  29. 'so, for R = "F0",  G="A3, and B = "2F, the hex representation in VB becomes BBGGRR:
  30. &H2FA3F0
  31.  
  32. 'to get the VB hex string for a color from the Long or RGB
  33. VBColorHexString = Right$( "000000" & Hex $( Color), 6)
  34. VBColorHexString = Right$( "000000" & Hex $( R + 256 * (G + 256 * B ), 6)
  35.  
  36. 'Note:  The Internet and other applications use RRGGBB for the hex format of a color
  37. WebColorHexString = Right$( "000000" & Hex $( B + 256 * (G + 256 * R ), 6)
  38.  
  39. 'to get the Web hex color string from the VB hex color string, swap the first 2 and last 2 character strings
  40. WebColorHexString = Right$(VBHexColorString, 2) & Mid $(VBColorHexString, 3, 2) & Left$(VBHexColorString, 2)
  41.  
  42.  

  Fuente (http://www.garybeene.com/code/visual%20basic168.htm)  no hay mucho mas.


Título: Re: convertir long a rgb
Publicado por: hechelion en 5 Marzo 2009, 07:56 am
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