Página 1 de 1

Calculo rgb()

Enviado: 22 Nov 2008 11:53
por TerraSoftware
Caros colegas, alguem sabe como fazer o calculo inverso rgb?
Eu tenho apenas o codigo da cor ja calculado que é 13947080, preciso saber qual foi o rgb que chegou neste numero, esta cor é bem proximo do palha do windows, algo proximo de rgb(192,192,192).


---
Nota da Moderação (Maligno):
O presente tópico foi movido da seção "Outras Bibliotecas Visuais e IDEs", uma vez que seu conteúdo diverge dos objetivos daquela seção.

Re: Calculo rgb()

Enviado: 22 Nov 2008 12:36
por Maligno
Nunca precisei desse tipo de cálculo, mas sou levado a crer que não há cálculo nenhum, mas uma diferença de representação. O valor 13947080 é decimal. Em hexa: D4D0C8; três bytes que representam o RGB. Não é isso?

Re: Calculo rgb()

Enviado: 22 Nov 2008 13:55
por Toledo
TerraSoftware, o valor do RGB da cor 13947080 é:

R = 200 G = 208 B = 212

Bom, para conseguir estes valores eu montei um pequeno programinha, veja abaixo:

Código: Selecionar todos

#include "windows.ch"
#include "guilib.ch"

Function Main
Private oWindowInicial

INIT WINDOW oWindowInicial MAIN TITLE "Verificar Cor" ;
            AT 200,200 SIZE 400,150

MENU OF oWindowInicial
  MENUITEM "&Informar Cor" ACTION VerCor()
  MENUITEM "&Sair" ACTION EndWindow()
ENDMENU

ACTIVATE WINDOW oWindowInicial

Return Nil

Function VerCor()
Local oWndCor
Private nColor:=13947080

INIT DIALOG oWndCor CLIPPER NOEXIT TITLE "Verificar Cor" AT 200,200 SIZE 300,150

@ 10,10 Say "Informe o Código da Cor" Size 200,22
@ 10,32 Get oGet VAR nColor Picture "99999999" Size 200,25 

@  20,100 BUTTON "Ver Cor" SIZE 100, 32 ON CLICK {||AbrePaleta(nColor)}

ACTIVATE DIALOG oWndCor

Return Nil

Function AbrePaleta(nColor)
nColor:=Hwg_ChooseColor(nColor,.F.)
if nColor!=Nil
 MsgInfo(str(nColor))
endif
Return Nil
Este código acima tem que ser compilado com HwGui.

Para ver a combinação RGB da cor, basta executar o exemplo acima e escolher a opção "Informar Cor". Depois digite o código da cor (13947080) no campo e clique no botão "Ver Cor". Vai aparecer uma paleta de cores, clique então em "Definir cores personalizadas" para ver os valores para RGB.

Agora, se você escolher alguma outra cor na paleta e clicar no botão Ok, será retornado o código da cor.

Abraços,

Re: Calculo rgb()

Enviado: 31 Dez 2008 11:44
por sambomb
O cálculo matemático é assim:
Blue * 65536 (256*256)
+
Green * 256
+
Red

Ou seja:
212*65536 = 13893632
208*256 = 53248
200
13893632+53248+200 = 13947080

Agora pra transformar de volta já seria um algoritmo complexo, mas pode ser feito através da função que o amigo postou acima....

Re: Calculo rgb()

Enviado: 27 Jul 2009 11:57
por Ale SB
TerraSoftware, Amigo eu precisei agora tb desta informaçao, como tb nao achei nada ja pronto, montei uma funçao com a Formula inversa da funçao RGB.

Obs.: Sei q o Post eh antigo, talvez nem precise mais disso, de qq forma, fica ai a dica p/ + alguem q possa precisar ou soh a nivel de curiosidade mesmo.

Código: Selecionar todos

********************************************************************************
function Int2Rgb(nIntCor)
////////////////////////////////////////////////////////////////////////////////
// Autor : Ale SB                                                             //
// Descricao : Funçao Inversa do nRGB.                                        //
//             Retorna o RGB a partir do Inteiro da Cor.                      //
// Parametros :                                                               //
//    - nIntCor ==> Inteiro da Cor.                                           //
// Retorno : RGB                                                              //
////////////////////////////////////////////////////////////////////////////////
********************************************************************************
  local nR := nG := nB := 0
  local nDiv1 := nDiv2 := 0
  local nDecQuoc1 := nDecQuoc2 := 0
    
  SET DECIMAL TO 10
  
  nDiv1 := nIntCor / 256
  nDecQuoc1 := Val(SubStr(Str(nDiv1), At(".",Str(nDiv1))))
  nR := Int(nDecQuoc1*256)
  
  nDiv2 := Int(nDiv1) / 256
  nB := Int(nDiv2)
  
  nDecQuoc2 := Val(SubStr(Str(nDiv2), At(".",Str(nDiv2))))
  nG := Int(nDecQuoc2*256)
  
  SET DECIMAL TO 2
  
return {nR,nG,nB}
nColor := 10899511
aCor := Int2Rgb(nColor)
? aCor[1], aCor[2], aCor[3]

@braços Ale