Redimensionando imagens

Outras bibliotecas visuais e IDEs para Harbour/xHarbour (xHGTK/HbWxW/GtWvT/GtWvW/WvWtools.etc)

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionando imagens

Mensagem por JoséQuintas »

Finalmente consegui.
Ainda testando, porque precisa algo mais.

No oficial, quando a imagem é menor do que o tamanho necessário:
gtwvg1.png
Com minha alteração:
gtwvg2.png
É GTWVG.
Ainda estou fazendo testes aqui na minha máquina.
A imagem sendo redimensionada automaticamente.

Nota:
A alteração foi relativamente simples.
Seria muito mais simples pra quem está acostumado com isso.
Porque não fizeram antes?
boa pergunta.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionando imagens

Mensagem por JoséQuintas »

Sobre as alterações:

imagem - o próprio Windows faz isso, na função que carrega a imagem.
wvg_LoadImage() já recebia até variáveis de tamanho, mas sem fazer uso e sem a opção LR_DEFAULTSIZE, que é a opção de redimensionar.
E fazia uso de LoacIcon() sem opção de redimensionar.

Código: Selecionar todos

FUNCTION wvg_LoadImage( ncImage, nSource, nBmpOrIcon, nWidth, nHeight )

   SWITCH hb_defaultValue( nSource, 0 )
   CASE 0
   CASE 1
      IF hb_defaultValue( nBmpOrIcon, WIN_IMAGE_BITMAP ) == WIN_IMAGE_ICON
         // RETURN wapi_LoadIcon( wapi_GetModuleHandle(), ncImage )
         RETURN wapi_LoadImage( wapi_GetModuleHandle(), ncImage, nBmpOrIcon, nWidth, nHeight, WIN_LR_DEFAULTSIZE )
      ELSE
         // RETURN wapi_LoadBitmap( wapi_GetModuleHandle(), ncImage )
         RETURN wapi_LoadImage( wapi_GetModuleHandle(), ncImage, nBmpOrIcon, nWidth, nHeight, WIN_LR_DEFAULTSIZE )
      ENDIF
   CASE 2
      RETURN wapi_LoadImage( , ncImage, nBmpOrIcon, nWidth, nHeight, WIN_LR_LOADFROMFILE + WIN_LR_DEFAULTSIZE )
   ENDSWITCH
   RETURN NIL
Restou um desafio:
Posso escolher o tamanho final, mas que tamanho escolher?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionando imagens

Mensagem por JoséQuintas »

Tamanho:

No Clipper/Harbour, imaginando um quadrado/retângulo, seria usar Left, Top, Bottom, Right
Pra obter altura e largura, só calcular:
Altura = Bottom - Top + 1
Largura = Right - Left + 1

Mas e na tela do Windows?

O pushbutton tem uma "tela" só pra ele, uma janela do Windows
Já que a janela é do Windows, perguntar direto para o Windows

Código: Selecionar todos

   wapi_GetWindowRect( ::hWnd, aWindowRect )
   nWidth  := Int( aWindowRect[ 3 ] - aWindowRect[ 1 ] ) 
   nHeight := Int( aWindowRect[ 4 ] - aWindowRect[ 2 ] )

No geral é entender o conceito de como funcionam as coisas.
Pelo menos se tem uma noção do que pesquisar.

Depois:

- se o Windows tem função pra isso
- como usar a função do Windows
- como obter/enviar informações

e o principal: aonde alterar.

No fonte do pushbutton tem o SetCaption() que é a rotina que coloca a imagem.
O pushbutton sabe que janela do Windows está usando.
E o pushbutton chama a rotina de carregar imagem, e depois chama a rotina do Windows que coloca a imagem na janela, passando essa imagem.
Então... é aí mesmo.

Resta resolver duas questões:
- A imagem tem que ser menor que o pushbutton, porque precisa espaço para o contorno
- Como da outra vez acrescentei a opção de texto + imagem, quando é assim a imagem tem que ser menor ainda, pra caber o texto

Nota:
Se o fonte de tudo isso fosse em C, é provável que não conseguiria mexer.
Por isso considerei a GTWVG uma das mais promissoras, porque a gente modificar usando fonte Harbour.

O pessoal das LIBs gráficas ainda não entendeu isso direito, e a GTWVG não é exceção.

Todo controle é uma janela do Windows "sem vida", os fontes vão dizendo o que ela deve fazer.
Ao mesmo tempo, uma janela de programa já é uma janela "com vida", o fonte já faz parte dela.

A coisa é simples: estão usando a janela errada.
Estão criando controles Windows, e não controles Harbour

Se o pushbutton fosse uma janela Harbour:
Como exemplo, era só usar o DrawImage() no evento de Resize - se modificou o tamanho da janela, refaz o desenho.

Sei o conceito, mas não sei por em prática...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

parabéns!
parabéns!
e parabéns!
prezado professor, v. é realmente uma pessoa que (pelo menos aqui) não pensa em si, e, mais nos outros.
Esse tópico achei fenomenal!!!
:{
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

JoséQuintas escreveu:FUNCTION wvg_LoadImage( ncImage, nSource, nBmpOrIcon, nWidth, nHeight )
prezado professor jquintas, estou testando agora seu exemplo.
estou usando o seguinte para chamar a função wvg_loadImage():

Código: Selecionar todos

  cBMP :=hb_DirBase()+"logo\key32.bmp"
  wvg_LoadImage(1,1,cBMP,10,100)
Os dois primeiros argumentos, principalmente o primeiro eu chutei. O segundo até que dá pra entender que faz parte do switch e pode ser 1 ou 2, menos o "0" (zero) pois não apresentaria nenhuma imagem.
...
vou compilar e ver no que dá ... :D
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

prezado professor...
sei que é muita "leiguisse, burrice, idiotisse... isse, isse, etc de minha parte"
por favor não fique bravo como alguns aqui do fórum...
mas, não deu...

Código: Selecionar todos

c:/mvinfo/hb34/lib/win/mingw/libgtwvg.a(paint.o):paint.c:(.text+0x700): multiple definition of `_HB_FUN_WVG_LOADIMAGE'
C:/Users/wal/AppData/Local/Temp/hbmk_8izr84.dir/rotinas5GT.o:rotinas5GT.c:(.text+0x1500): first defined here
Ou seja, a sua mensagem, na verdade já faz parte da lib GTWVG, estou correto?
:%
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionando imagens

Mensagem por JoséQuintas »

Como eu disse, é uma alteração na GTWVG. Não é uma inclusão.
Mas é bom esperar a versão oficial, pode ser que o Pritpal implemente isso de outra forma.
Se fizer isso agora, vai ter que lembrar de mexer sempre.
E se ele fizer diferente, não vai ser compatível.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

JoséQuintas escreveu:Como eu disse, é uma alteração na GTWVG. Não é uma inclusão.
Mas é bom esperar a versão oficial, pode ser que o Pritpal implemente isso de outra forma.
Se fizer isso agora, vai ter que lembrar de mexer sempre.
E se ele fizer diferente, não vai ser compatível.
Ok, prezado professor...
bom, dentro do mesmo assunto "imagens".
fuçando no arquivo da pasta "tests" (gtwvg), descobri o seguinte pequeno código que coloca imagens, boxes, etc... numa tela console (gráfica para a gtwvg):

Código: Selecionar todos

#define BMP                hb_DirBase() + "LOGO\BMP1.bmp"
aPaint := {}
AAdd( aPaint, { "Image", {|| wvt_DrawImage( 8, 62, 12, 69, BMP ) }, { WVT_BLOCK_IMAGE, 8, 62, 12, 69 } } )
WvtSetPaint( aPaint )
Pelo que vejo, essas 4 linhas, deveriam imprimir ou melhor, desenhar um box (drawimage) com dimensões e com o arquivo BMP1.BMP dentro dele; mas isso não funciona.
Já o código abaixo, que pertence ao mesmo arquivo "demonstrativo" da gtwvg a qual estamos referindo, funciona corretamente; pois é criada uma tela (formulário modal) muito top:

Código: Selecionar todos

   oCrt := WvgCrt():New( , , { 1, 8 }, { 12, 49 }, , .T. )

   oCrt:lModal      := .T.
   oCrt:resizable   := .T.
   oCrt:closable    := .T.
   oCrt:title       := "Modal Dialog!"
   oCrt:icon        := hb_DirBase() + "LOGO\vr_1.ico"

   oCrt:Create()
   oCrt:show()
Enfim, o que está faltando para as linhas de código anteriores funcionarem?
No caso, para matar a dúvida, adicionei também e compilei, e, não funcionou, as linhas:

Código: Selecionar todos

   Set( _SET_DATEFORMAT, "yyyy-mm-dd" ) // não vejo que seja essa a linha que falta para funcionar
   Set( _SET_EVENTMASK, hb_bitOr( INKEY_ALL, HB_INKEY_GTEVENT ) ) // não vejo que seja essa a linha que falta para funcionar
   wvt_SetGUI( .T. ) // talvez seja essa linha a chave de tudo
   wvt_SetFont( "Courier New", 18, 0, 0 )
   wvt_SetMouseMove( .T. )  // não vejo que seja essa a linha que falta para funcionar
   SetColor( "N/W" )
   CLS
   wvt_ShowWindow( SW_RESTORE ) // penso que poderia ser essa também
Por fim, tem as seguintes linhas iniciais, que resolvi colocar e também não desenhou o box:

Código: Selecionar todos

#if defined( __HBSCRIPT__HBSHELL ) .AND. defined( __PLATFORM__WINDOWS )
   hbshell_gtSelect( "GTWVG" )
#endif
Mas, não sei do que se tratam... enfim, tudo pra mim é novo e muito complexo e complicado.
às vezes uma coisa simples se torna difícil pra mim, e, outra difícil torna-se fácil... sei lá... tem hora que nem sei quem sou...
"lá pregunta?"
"dio no sei quein soy dio!"
"segura la niña!!!"
rsrsrs
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

por fim...
somente a cor da tela do "demo" da pasta "tests" é que pegou e ficou exatamente igual.
Mas, isso era óbvio...
té breve!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

olá pessoal...
estou tentando entender (essa linha abaixo), mas, quanto mais tento entender menos conhecimento adquiro:

Código: Selecionar todos

Wvg_Image( 15,36,16,42, {-3,-3,3,3}, GOBJ_IMAGESOURCE_FILE, "Login" )
Segundo essa linha, a função WVG_IMAGE() com a variável de sistema Gobj_ImageSource_File deveria criar um retângulo com as dimensões 15,36,16,42 (já os -3 ... não sei para que servem). E realmente, depois de muita dor de cabeça fiz funcionar e realmente a imagem é carregada pra dentro do retângulo.
Bom, mas, considero o seguinte:
- 1 ) se estiver dentro da pasta de compilação o arquivo e usar com o nome correto. Exemplo: "vouch1.bmp", a imagem é exibida;
- 2 ) se estiver dentro da pasta também e for feita a seguinte substituição (NÃO funciona também):

Código: Selecionar todos

#define Login                  hb_DirBase() + "vouch1.bmp"
- 3 ) se estiver dentro da pasta e usar no arquivo .RC (a seguinte linha para que fique embutido no .exe) TAMBÉM não funciona:

Código: Selecionar todos

Login         BITMAP     "vouch1.bmp"
Então, qual é? qual foi? que que tu tá nessa? ou
Agora se usar a seguinte linha acrescida com a outra (AÍ SIM, FUNCIONA):

Código: Selecionar todos

Login := hb_DirBase() + "vouch1.bmp"
Onkotô? Donkôvim? Pronkovô?
alguém tem alguma ideia?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionando imagens

Mensagem por JoséQuintas »

Se assim funciona, então qual é o problema?

Lembra do AllInOne? Tem isto no allinone:

Código: Selecionar todos

   wvt_DrawImage( 3, 0, MaxRow() - 2, MaxCol(), "image\jpa.ico" )
Existe o jeito pra trabalhar organizado e desorganizado.
Você está no desorganizado.
Já perguntou sobre o mesmo problema de pastas sobre o bloco de notas.
A solução de um é a mesma do outro.

Trabalhe em uma coisa de cada vez, até entender direito o que está fazendo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

ok então...
bom, estou usando 2 imagens:
- uma imagem como tela de splash;
- outra como tela de login (tipo a sua JPA).
Como fazer para encerrá-las ao final de cada etapa?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionando imagens

Mensagem por JoséQuintas »

Já viu o resultado?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Redimensionando imagens

Mensagem por microvolution »

sim, e tô gostando da ideia...
veja a imagem que criei de login:
16-0118 - tela login gráfica.png
Só tá faltando acrescentar um:

Código: Selecionar todos

Wvg_BoxRaised( 03,20,13,59, {-5,-5,5,5} )
aliás, o que são esses argumentos entre {}, sendo os 2 primeiros negativos?

Ah! falta também um tipo de :destroy em ambas as linhas assim que o usuário efetua login.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionando imagens

Mensagem por JoséQuintas »

Só não deixo meu menu assim porque a imagem some sozinha.
telamenu.png
E agora está perguntando como faz pra ela sumir.

Quero saber o que acontece aí, me interessou.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder