Clipper On Line • Ver Tópico - Captura de Tela com JPG.dll

Captura de Tela com JPG.dll

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Captura de Tela com JPG.dll

Mensagempor asimoes » 17 Abr 2018 13:06

Pessoal,

Não sei se tem exemplo usando JPG.dll para captura de tela (savescreen) para arquivo, segue contribuição.
h-JPG.zip
Função para captura de tela em disco
(808.69 KiB) Baixado 33 vezes


#include "hbdyn.ch"

FUNCTION MAIN()

   hwg_MsgInfo( "Teste com captura de tela" )
   
   FOTO( "TESTE2.JPG")

RETURN Nil

FUNCTION FOTO( cImagem )

nHandleDLL := Hb_LibLoad("JPG.dll")

   nStatus:=hb_dynCall( { "SaveToJpgEx", nHandleDLL, HB_DYN_CALLCONV_STDCALL}, 0, cImagem, 1024, 768)

   Hb_LibFree(nHandleDLL)

RETURN Nil

TESTE2.JPG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Captura de Tela com JPG.dll

Mensagempor asimoes » 17 Abr 2018 13:19

A função pode ser útil para capturar tela com erro, ou até ser um espião do sistema (rs)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Captura de Tela com JPG.dll

Mensagempor asimoes » 17 Abr 2018 13:32

Usando GT*

FUNCTION FOTO( cImagem )

nHandleDLL := Hb_LibLoad("JPG.dll")

   nWidth  := hb_gtInfo(HB_GTI_DESKTOPWIDTH )
   nHeight := hb_gtInfo(HB_GTI_DESKTOPHEIGHT )
   
   nStatus:=hb_dynCall( { "SaveToJpgEx", nHandleDLL, HB_DYN_CALLCONV_STDCALL}, 0, cImagem, nWidth, nHeight)

   Hb_LibFree(nHandleDLL)

RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Captura de Tela com JPG.dll

Mensagempor asimoes » 17 Abr 2018 13:43

Tem utilitário interessante neste link:

http://www.nirsoft.net/utils/dll_export_viewer.html
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Captura de Tela com JPG.dll

Mensagempor pauloa1 » 18 Abr 2018 10:17

Foi feito com Harbour ?

Testei com xHB e não tem a função hb_dynCall()

Paulo
pauloa1
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 175
Data de registro: 25 Jun 2008 14:57
Cidade/Estado: Augusto Pestana-RS
Curtiu: 1 vez
Mens.Curtidas: 4 vezes

Captura de Tela com JPG.dll

Mensagempor asimoes » 18 Abr 2018 10:19

Harbour 3.2 e 3.4 mais atual
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Captura de Tela com JPG.dll

Mensagempor asimoes » 18 Abr 2018 10:59

Usando um contador para gerar o jpg

FUNCTION FOTO()
THREAD STATIC nCounter := 1

   cCounter := "0001"
   
   nHandleDLL := Hb_LibLoad( "JPG.dll" )

   nWidth  := Hb_gtInfo( HB_GTI_DESKTOPWIDTH )
   nHeight := Hb_gtInfo( HB_GTI_DESKTOPHEIGHT )
   
   nWidth  := Hwg_GetDeskTopWidth()
   nHeight := Hwg_GetDeskTopHeight()
   
   IF Hb_FileExists( Hb_DirBase() + "JPG.INI" )
      cCounter := hwg_GetIni( 'CONTADOR', 'Counter', '', Hb_DirBase() + "JPG.INI" )
      nCounter := Val( cCounter )
   ENDIF

   cFile := cCounter + [.JPG]

   DO WHILE Hb_FileExists( cFile )
      cCounter := StrZero( nCounter++, 4 )
      cFile := cCounter + [.JPG]
   ENDDO
   
   nStatus:=hb_dynCall( { "SaveToJpgEx", nHandleDLL, HB_DYN_CALLCONV_STDCALL}, 0, cFile, nWidth, nHeight )

   hwg_WriteIni( 'CONTADOR', 'Counter', cCounter, Hb_DirBase() + "JPG.INI" )
   
   Hb_LibFree( nHandleDLL )

RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Captura de Tela com JPG.dll

Mensagempor JoséQuintas » 18 Abr 2018 11:26

Só lembrando que a Bostaurus da HMG3 faz isso, o que dispensa DLL adicional.
Vai depender do que mais estiver usando, que pode dar conflito com a LIB da HMG3.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10359
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 659 vezes

Captura de Tela com JPG.dll

Mensagempor hazael » 18 Abr 2018 14:30

E como faz para extrair o mínimo necessário dessa Bostaurus lib e fazer o mesmo?
E essa JPG.dll vem de onde?
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 492
Data de registro: 27 Nov 2016 12:59
Curtiu: 9 vezes
Mens.Curtidas: 35 vezes

Captura de Tela com JPG.dll

Mensagempor hazael » 18 Abr 2018 14:33

Creio que encontrei mais detalhes: http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=18314#p115928

Mas tem uma diferença, parece que como o próprio nome diz, gera arquivo .BMP enquanto a solução aqui gera .JPG

Tem como fazer em .JPG ou .PNG sem usar DLL?
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 492
Data de registro: 27 Nov 2016 12:59
Curtiu: 9 vezes
Mens.Curtidas: 35 vezes

Captura de Tela com JPG.dll

Mensagempor asimoes » 18 Abr 2018 18:36

Esse exemplo que eu postei tem na Minigui Ex.

Eu adaptei para ser usado com harbour puro.

Na minigui tem um exemplo:

\MiniGUI\SAMPLES\Applications\ScreenshotMaker

Bitmap é um arquivo maior, por isso escolhi a função que eu postei, eu queria também poder gerar png mas não achei exemplo. acho que nesse caso posso usar a freeimage para converter de jpg para png
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Captura de Tela com JPG.dll

Mensagempor Claudio Soto » 19 Abr 2018 00:09

Internamente BT trabaja con bitmap porque el api de Windows trabaja con bitmap, pero BT lee y grava en otros formatos sin necesidad de Dll o alguna otra lib externa, ver la documentación:
http://www.hmgforum.com/hmgdoc/BosTauru ... eGuide.htm

BT_BitmapLoadFile (cFileName)

Loads an image (BMP, JPG, GIF, TIF or PNG) from the disk or resources and returns a handle to bitmap format image (hBitmap).

cFileName: is the name of the file or of the resource that contains the image.





BT_BitmapLoadEMF (cFileName, aRGBcolor_Fill_Bk, NewWidht, NewHeight, Mode_Stretch)

Loads an EMF (Enhanced Meta File) image from the disk or resources and returns a handle to bitmap format image (hBitmap).

cFileName: is the name of the file or of the resource that contains the image.

aRGBcolor_Fill_Bk: array containing the RGB colors that paint the background of the bitmap. For default: aRGBcolor_Fill_Bk = {0,0,0} = BLACK.

New_Width, New_Height: is the new size of the bitmap image. For default this values are the original width and height of the EMF image.

Mode_Stretch: sets the mode as the image of origin is adjusts (is stretches or compresses) in the new size bitmap, it is one of the constants: BT_SCALE or BT_STRETCH (defined in BosTaurus.CH). For default Mode_Stretch = BT_STRETCH.





BT_BitmapSaveFile (hBitmap, cFileName, nTypePicture)

Save an image (BMP, JPG, GIF, TIF or PNG) in the disk.

hBitmap: is a handle to the bitmap image.

cFileName: is the name of the file to save.

nTypePicture: specifies the format in which you want to save the image, it is one of the constants: BT_FILEFORMAT_BMP, BT_FILEFORMAT_JPG, BT_FILEFORMAT_GIF, BT_FILEFORMAT_TIF or BT_FILEFORMAT_PNG (defined in BosTaurus.CH). For default nTypePicture = BT_FILEFORMAT_BMP.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 466
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 33 vezes
Mens.Curtidas: 133 vezes

Captura de Tela com JPG.dll

Mensagempor hazael » 19 Abr 2018 12:19

Ggracias por la explicación.
Voy a intentar hacer algo con la información que me ha pasado.
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 492
Data de registro: 27 Nov 2016 12:59
Curtiu: 9 vezes
Mens.Curtidas: 35 vezes

Captura de Tela com JPG.dll

Mensagempor hazael » 19 Abr 2018 14:37

Claudio,

I am trying to extract the necessary code to create a self containing example with pure Harbour (GTWVT) but I am facing some functions and variables specific to HMG...

What is _HMG_SYSDATA in HMG?

I want to use the following function in GTWVT but I got stuck in it because of _HMG_SYSDATA.

Function GetFormHandle (FormName)
*-----------------------------------------------------------------------------*
Local mVar , i

   mVar := '_' + FormName

   i:=&mVar
   if i == 0
      Return 0
   endif

Return ( _HMG_SYSDATA [ 67  ] [ &mVar ] )

In some C I found the following:
HMG_parnl(1)
HMG_parc  (2)

That possibly could be changed to:
hb_parnl(1)
hb_parc  (2)

If I am not wrong... is it OK?
Sorry I do not have experience with GUI and HMG...

Please help.
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 492
Data de registro: 27 Nov 2016 12:59
Curtiu: 9 vezes
Mens.Curtidas: 35 vezes

Captura de Tela com JPG.dll

Mensagempor asimoes » 19 Abr 2018 15:15

Para pegar o handle da janela você pode usar:

Hb_gtInfo( HB_GTI_WINHANDLE )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4037
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 284 vezes
Mens.Curtidas: 197 vezes

Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

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


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