Clipper On Line • Ver Tópico - Redimensionando imagens

Redimensionando imagens

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

Moderador: Moderadores

 

Redimensionando imagens

Mensagempor JoséQuintas » 06 Jan 2016 10:21

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionando imagens

Mensagempor JoséQuintas » 06 Jan 2016 10:32

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.

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionando imagens

Mensagempor JoséQuintas » 06 Jan 2016 11:21

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

   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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionando imagens

Mensagempor microvolution » 16 Jan 2016 19:41

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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor microvolution » 17 Jan 2016 14:27

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():
  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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor microvolution » 17 Jan 2016 14:58

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:/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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor JoséQuintas » 17 Jan 2016 15:24

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionando imagens

Mensagempor microvolution » 17 Jan 2016 17:16

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):
#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:
   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:
   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:
#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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor microvolution » 17 Jan 2016 17:21

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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor microvolution » 18 Jan 2016 16:23

olá pessoal...
estou tentando entender (essa linha abaixo), mas, quanto mais tento entender menos conhecimento adquiro:
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):
#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:
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):
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor JoséQuintas » 18 Jan 2016 20:18

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

Lembra do AllInOne? Tem isto no allinone:

   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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionando imagens

Mensagempor microvolution » 18 Jan 2016 20:30

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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor JoséQuintas » 18 Jan 2016 20:32

Já viu o resultado?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionando imagens

Mensagempor microvolution » 18 Jan 2016 20:54

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:
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Redimensionando imagens

Mensagempor JoséQuintas » 18 Jan 2016 20:54

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para Outras Bibliotecas Visuais e IDEs

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro