Calculo rgb()

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Calculo rgb()

Mensagem 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.
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Calculo rgb()

Mensagem 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?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Calculo rgb()

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Re: Calculo rgb()

Mensagem 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....
Imagem

Rca Sistemas - Itaocara - RJ
Avatar do usuário
Ale SB
Usuário Nível 3
Usuário Nível 3
Mensagens: 201
Registrado em: 20 Jul 2004 17:30
Localização: Campo Grande / MS

Re: Calculo rgb()

Mensagem 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
Imagemr]
Responder