Página 1 de 1
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 16:13
por wmanesco
Boa tarde pessoal,
Preciso converter cores de RGB para Hexadecimal e vice versa.
Pesquisei e não encontrei nada no harbour relacionado, será que tem?
Alguém já precisou de algo assim?
Agradeço a compreensão
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 16:23
por Kapiaba
http://erikasarti.net/html/tabela-cores/
Só pra brincar com as cores:
Código: Selecionar todos
*************************************************************************
#Include "Fivewin.ch"
//-----------------------------------------------------------------------
Function Main()
Private oSay1, oSay2, oSay3, oSay4, oSay5, oSay6
DEFINE FONT oFONT1 NAME "MS Sans Serif" SIZE 0, -24
Define DIALOG oDlg TITLE "Cores - CLIQUE COM O BOTÃO DIREITO DO MOUSE" ;
FROM 0, 0 to 400, 700 PIXEL COLOR 0, 16777215
ACTIVATE DIALOG oDlg ON INIT Inicio() Center
Return NIL
//----------------------------------------------------------------------------
Function Inicio()
@ 20, 22 SAY oSay1 VAR "Cor do Texto:" SIZE 152, 24 PIXEL;
OF oDlg COLOR 0, 16777215 FONT oFont1
@ 20, 209 SAY oSay2 VAR "0" SIZE 142, 28 PIXEL;
OF oDlg COLOR 0, 16777215 FONT oFont1
@ 20, 371 SAY oSay3 VAR RRGB(0) SIZE 200, 28 PIXEL;
OF oDlg COLOR 0, 16777215 FONT oFont1
@ 80, 20 SAY oSay4 VAR "Cor da Janela:" SIZE 175, 33 PIXEL;
OF oDlg COLOR 0, 16777215 FONT oFont1
@ 80, 209 SAY oSay5 VAR "0" SIZE 141, 39 PIXEL;
OF oDlg COLOR 0, 16777215 FONT oFont1
@ 80, 371 SAY oSay6 VAR RRGB(0) SIZE 200, 39 PIXEL;
OF oDlg COLOR 0, 16777215 FONT oFont1
oDlg:bRClicked := {|nRow, nCol| RPopup( nRow, nCol, oDlg, {oSay1, oSAy2, oSay3, oSay4, oSay5, oSay6} ) }
Return NIL
//---------------------------------------------------------------------------
function RPopup( nRow, nCol, oDlg, aSays )
Local oMenu
oMenu := MenuPopUp( oDlg, aSays )
ACTIVATE POPUP oMenu WINDOW oDlg AT nRow, nCol
return nil
//---------------------------------------------------------------------------
Function MenuPopUp( oDlg, aSays )
Local oMenu
Local nClrTxt := oSay1:nClrText
Local nClrDlg := oDlg:nClrPane
Menu oMenu PopUp
MenuItem "Cor do Texto" Action ( nClrTxt := ChooseColor( nClrTxt ), AplicaCores(oDlg, aSays, nClrTxt, nClrDlg) )
MenuItem "Cor da Janela" Action( nClrDlg := ChooseColor( nClrDlg ), AplicaCores(oDlg, aSays, nClrTxt, nClrDlg) )
endmenu
Return oMenu
//-------------------------------------------------------------------------------
Function AplicaCores( oDlg, aSays, nClrTxt, nClrDlg )
Local i, cRgbTxt, cRgbDlg
oDlg:SetColor( nClrTxt, nClrDlg )
oDlg:Refresh()
for i := 1 to 6
aSays[i]:SetColor( nClrTxt, nClrDlg )
aSays[i]:Refresh()
next
cRgbTxt := RRGB( nClrTxt )
cRgbDlg := RRGB( nClrDlg )
aSays[2]:SetText( nClrTxt )
aSays[3]:SetText( cRgbTxt )
aSays[5]:SetText( nClrDlg )
aSays[6]:SetText( cRgbDlg )
Return NIL
//----------------------------------------------------------------------------
Function RRGB( nCor )
Local cRGB := "{ "+StrZero( nRGBRed( nCor ), 3 )+", "+;
StrZero( nRGBGreen( nCor ), 3 )+", "+;
StrZero( nRGBBlue( nCor ), 3 )+" }"
Return cRGB
*************************************************************************
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 16:24
por Kapiaba
Brincanco com degrade.
Código: Selecionar todos
**-----------------------------------------------------------------------------------------------------------**
** Pintar o fundo de uma tela( Dlg,Folder,Wnd) **
**-----------------------------------------------------------------------------------------------------------**
** Parametros : oDlg : Onde vai pintar **
** : Cor1 : Cor incial na parte de cima da tela **
** : Cor2 : Cor Final na parte de baixo da tela **
** Exemplo : oDlg[1]:bPainted:={|| PCS_Pinta_Tela(oDlg[1],GetSysColor(15),GetSysColor(16) )} **
**-----------------------------------------------------------------------------------------------------------**
FUNCTION PCS_Pinta_Tela(oDlgTxt,aCor1,aCor2)
LOCAL hWnd:=oDlgTxt:hWnd
LOCAL aRec:=GetClientRect(hWnd)
LOCAL oBrush,nX,nStp:=(aRec[3]-aRec[1])/2
LOCAL nColor1:=IF(Empty(aCor1),GetSysColor(15),aCor1)
LOCAL nColor2:=IF(Empty(aCor2),GetSysColor(15),aCor2)
LOCAL nColorR1:=nRgbRed(nColor1),nColorG1:=nRgbGreen(nColor1),nColorB1:=nRgbBlue(nColor1)
LOCAL nColorR2:=nRgbRed(nColor2),nColorG2:=nRgbGreen(nColor2),nColorB2:=nRgbBlue(nColor2)
LOCAL nSomaR:=ABS(nColorR2-nColorR1),nSomaG:=ABS(nColorG2-nColorG1),nSomaB:=ABS(nColorB2-nColorB1)
nSomaR:=IIF(nSomaR<0,0,(nSomaR/((aRec[3])/2)))
nSomaG:=IIF(nSomaG<0,0,(nSomaG/((aRec[3])/2)))
nSomaB:=IIF(nSomaB<0,0,(nSomaB/((aRec[3])/2)))
oDlgTxt:GetDC()
aRec[3]:=0
FOR nX:=1 TO nStp
aRec[3]+=2
DEFINE BRUSH oBrush COLOR nRgb(nColorR1,nColorG1,nColorB1)
FillRect(oDlgTxt:hDC,aRec,oBrush:hBrush)
RELEASE BRUSH oBrush
aRec[1]+=2
nColorR1:=IIF(nColorR2>=nColorR1,nColorR1+nSomaR,nColorR1-nSomaR)
nColorG1:=IIF(nColorG2>=nColorG1,nColorG1+nSomaG,nColorG1-nSomaG)
nColorB1:=IIF(nColorB2>=nColorB1,nColorB1+nSomaB,nColorB1-nSomaB)
NEXT
oDlgTxt:ReleaseDC()
RETURN(NIL)
**-----------------------------------------------------------------------------------------------------------**
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 16:28
por Kapiaba
Agora, com sua permição, vou misturar os dois:
Código: Selecionar todos
***********************************************************
#include "fivewin.ch"
Static nCor1 := 16777215
Static nCor2 := 16777215
//----------------------------------------------------------------------------------------------------------
Function Main()
Private oBt1
Define dialog oDlg Title "Teste Degrade - CLIQUE COM O BOTÃO DIREITO DO MOUSE" From 0,0 to 400,600 Pixel
Activate Dialog oDlg On Init Inicio() ON PAINT PCS_Pinta_Tela() CENTER
Return NIL
**-----------------------------------------------------------------------------------------------------------**
** Pintar o fundo de uma tela( Dlg,Folder,Wnd) **
**-----------------------------------------------------------------------------------------------------------**
** Parametros : oDlg : Onde vai pintar **
** : Cor1 : Cor incial na parte de cima da tela **
** : Cor2 : Cor Final na parte de baixo da tela **
** Exemplo : oDlg[1]:bPainted:={|| PCS_Pinta_Tela(oDlg[1],GetSysColor(15),GetSysColor(16) )} **
**-----------------------------------------------------------------------------------------------------------**
FUNCTION PCS_Pinta_Tela()
LOCAL hWnd:=oDlg:hWnd
LOCAL aRec:=GetClientRect(hWnd)
LOCAL oBrush,nX,nStp:=(aRec[3]-aRec[1])/2
LOCAL nColorR1:=nRgbRed(nCor1),nColorG1:=nRgbGreen(nCor1),nColorB1:=nRgbBlue(nCor1)
LOCAL nColorR2:=nRgbRed(nCor2),nColorG2:=nRgbGreen(nCor2),nColorB2:=nRgbBlue(nCor2)
LOCAL nSomaR:=ABS(nColorR2-nColorR1),nSomaG:=ABS(nColorG2-nColorG1),nSomaB:=ABS(nColorB2-nColorB1)
nSomaR:=IIF(nSomaR<0,0,(nSomaR/((aRec[3])/2)))
nSomaG:=IIF(nSomaG<0,0,(nSomaG/((aRec[3])/2)))
nSomaB:=IIF(nSomaB<0,0,(nSomaB/((aRec[3])/2)))
oDlg:GetDC()
aRec[3]:=0
FOR nX:=1 TO nStp
aRec[3]+=2
DEFINE BRUSH oBrush COLOR nRgb(nColorR1,nColorG1,nColorB1)
FillRect(oDlg:hDC,aRec,oBrush:hBrush)
RELEASE BRUSH oBrush
aRec[1]+=2
nColorR1:=IIF(nColorR2>=nColorR1,nColorR1+nSomaR,nColorR1-nSomaR)
nColorG1:=IIF(nColorG2>=nColorG1,nColorG1+nSomaG,nColorG1-nSomaG)
nColorB1:=IIF(nColorB2>=nColorB1,nColorB1+nSomaB,nColorB1-nSomaB)
NEXT
oDlg:ReleaseDC()
RETURN(NIL)
**-----------------------------------------------------------------------------------------------------------**
//----------------------------------------------------------------------------
Function Inicio()
@ 340, 250 Button "Código da Cores" Size 100,20 Pixel;
Action MsgInfo( "1ª COR = "+Str(nCor1)+" - "+RRgb(nCor1)+CRLF+;
"2ª COR = "+Str(nCor2)+" - "+RRgb(nCor2) )
oDlg:bRClicked := {|nRow, nCol| RPopup( nRow, nCol) }
Return NIL
//---------------------------------------------------------------------------
function RPopup( nRow, nCol )
Local oMenu
oMenu := MenuPopUp( oDlg )
ACTIVATE POPUP oMenu WINDOW oDlg AT nRow, nCol
return nil
//---------------------------------------------------------------------------
Function MenuPopUp()
Local oMenu
Menu oMenu PopUp
MenuItem "Primeira Cor" Action ( nCor1 := ChooseColor( nCor1 ), oDlg:Refresh() )
MenuItem "Segunda Cor" Action( nCor2 := ChooseColor( nCor2 ), oDlg:Refresh() )
endmenu
Return oMenu
//----------------------------------------------------------------------------
Function RRGB( nCor )
Local cRGB := "{ "+StrZero( nRGBRed( nCor ), 3 )+", "+;
StrZero( nRGBGreen( nCor ), 3 )+", "+;
StrZero( nRGBBlue( nCor ), 3 )+" }"
Return cRGB
***********************************************************
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 16:29
por Kapiaba
Código: Selecionar todos
#include "fivewin.ch"
static oWnd
static nZoom := 2
static oColor
function main()
local oTimer
DEFINE WINDOW oWnd TITLE "Prueba de ventana" MENU mimenu()
DEFINE TIMER oTimer OF oWnd ;
INTERVAL 70 ACTION GetColor()
oTimer:Activate()
ACTIVATE WINDOW oWnd
oTimer:DeActivate()
return nil
function mimenu()
local oMenu
MENU oMenu
MENUITEM "Zoom"
MENU
MENUITEM "1" ACTION ( nZoom := 1 )
MENUITEM "2" ACTION ( nZoom := 2 )
MENUITEM "3" ACTION ( nZoom := 3 )
MENUITEM "4" ACTION ( nZoom := 4 )
MENUITEM "5" ACTION ( nZoom := 5 )
ENDMENU
ENDMENU
return oMenu
function GetColor()
local hDeskTop := GetDC(0)
local a := GetCursorPos()
local nColor := GetPixel( hDeskTop, a[2], a[1] )
local hDC := oWnd:GetDC()
local hPen := CreatePen( PS_SOLID,1,CLR_HRED )
local hOldPen
local nTop, nLeft
local nWidth, nHeight
nTop := 10
nLeft := 100
nWidth := 300
nHeight := 200
SetBkColor( hDC, nColor )
TextOut( hDC, 10, 10, " " )
TextOut( hDC, 25, 10, " " )
TextOut( hDC, 40, 10, " " )
TextOut( hDC, 60, 10, " " + corTOrgb( nColor ) + " " )
Moveto( hDC, nLeft-1, nTop-1)
Lineto( hDC, nLeft + nWidth+1, nTop-1 )
Lineto( hDC, nLeft + nWidth+1, nTop+nHeight+1 )
Lineto( hDC, nLeft -1, nTop+nHeight+1 )
Lineto( hDC, nLeft-1, nTop-1)
StretchBlt( hDC, nLeft, nTop, nWidth, nHeight, hDeskTop, a[2]-(nWidth/(nZoom*2)), a[1]-(nHeight/(2*nZoom)), nWidth/nZoom, nHeight/nZoom, 13369376 )
hOldPen := SelectObject( hDC, hPen )
Moveto( hDC, nLeft+nWidth/2+1, nTop-1 )
Lineto( hDC, nLeft+nWidth/2+1, nTop+nHeight+1 )
Moveto( hDC, nLeft+1, nTop+nHeight/2+1 )
Lineto( hDC, nLeft+nWidth+1, nTop+nHeight/2+1 )
SelectObject( hDC, hOldPen )
DeleteObject( hPen )
oWnd:ReleaseDC()
ReleaseDC( 0, hDeskTop )
return nil
*****************
function corTOrgb( Cor1 )
*****************
local Cor2, Cor3
Cor3 := int(Cor1 / 65536)
Cor2 := int( ( Cor1 - ( Cor3 * 65536 ) ) / 256 )
Cor1 := Cor1 - ( Cor3 * 65536 ) - ( Cor2 * 256 )
return strzero(Cor1,3) + "," + strzero(Cor2,3) + "," + strzero(Cor3,3)
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
HB_FUNC( STRETCHBLT )
{
hb_retl( StretchBlt( (HDC) hb_parnl( 1 ) ,
hb_parni( 2 ) ,
hb_parni( 3 ) ,
hb_parni( 4 ) ,
hb_parni( 5 ) ,
(HDC) hb_parnl( 6 ) ,
hb_parni( 7 ) ,
hb_parni( 8 ) ,
hb_parni( 9 ) ,
hb_parni( 10 ) ,
(DWORD) hb_parnl( 11 )
) ) ;
}
#pragma ENDDUMP
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 17:18
por wmanesco
Vou dar uma estudada nestes exemplos, obrigado!!
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 18:23
por JoséQuintas
Não sei se responde sua pergunta:
Código: Selecionar todos
hbmk2 -find rgb
hbwin.hbc (installed):
wapi_RGB()
hbmk2 -find hex
Harbour core (installed):
hb_HexToNum()
hb_HexToStr()
hb_NumToHex()
hb_StrToHex()
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 28 Set 2016 21:37
por wmanesco
Perfeito, obrigado!
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 14 Out 2022 13:58
por Adalberto
Maestro JoseQuintas, buenas tardes
Se que este es un tema de 2016 pero estoy con el mismo problema, al compilar me dice que NO encuentra la funcion WAPI_RGB y no se como resolverlo, estoy usando Harbour 3.2 nightly
Por favor ayúdeme con este tema, ya estoy varios días con este problema y no encuentro solución, desde ya le agradezco de corazón la ayuda que me pueda proporcionar
Con atención,
Adalberto
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 14 Out 2022 16:07
por Itamar M. Lins Jr.
Olá!
Adicione a lib hbwin.hbc ao seu projeto.
O hbmk2.exe avisa inclusive se está faltando.
Saudações,
Itamar M. Lins Jr.
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 14 Out 2022 17:11
por Adalberto
Itamar, buenas tardes.
Muy agradecido por tu pronta respuesta, el script que utilizo es el siguiente:
Código: Selecionar todos
-oEnin
-inc
-compr=max
-quiet
-lxhb
-lhbwin
-lhbct
-strip
-w0
*.prg
*.c
#
Icono.Rc
gtwvg.hbc
hbwin.hbc
hbtest.hbc
xhb.hbc
Y NO he tenido suerte, sigue dando el mismo error, no encuentra la funcion WAPI_RGB, que otra instrucción me falta?
Aguardo vuestra ayuda.
Adalberto
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 14 Out 2022 18:29
por alxsts
Olá!
Se você está usando Harbour 3.2, troque wapi_RGB() por WIN_RGB.
A função wapi_RGB() pertence ao Harbour 3.4.
No arquivo hbwin.ch do Harbour 3.2, existe a definição da função:
Código: Selecionar todos
#define WIN_RGB( nR, nG, nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )
Verifique se você tem esta linha no teu arquivo hbwin.ch. Se a linha existir e você preferir usar wapi_RGB(), pode adicionar no teu hbwin.ch ou no teu programa fonte, a linha:
Código: Selecionar todos
#define WAPI_RGB( nR, nG, nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 14 Out 2022 19:59
por alxsts
Olá!
Em tempo:
outra opção é criar e utilizar a tua própria função:
Código: Selecionar todos
FUNCTION MyRGB( nR, nG, nB )
RETURN ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )
Desta forma, ficará independente da versão do Harbour e do arquivo hbwin.ch...
Conversão de cores (RGB para Hexadecimal e vice-versa)
Enviado: 14 Out 2022 20:38
por Adalberto
Alexander, Itamar
Buenas noches y muchas gracias por la ayuda, oportuna y eficaz; funcionó de maravilla
Un grande abrazo desde Bolivia y mi agradecimiento sincero.
Adalberto