Clipper On Line • Ver Tópico - Cortar imagem

Cortar imagem

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Cortar imagem

Mensagempor nilton579 » 16 Fev 2018 11:07

Bom dia!

Alguém sabe dizer se existe alguma rotina ou função em Harbour/Minigui para cortar uma imagem?

Estou implementando um aplicativo para registro de acesso na recepção de um hospital, com registro da imagem do visitante. No entanto, a imagem obtida da webcam está na horizontal, e necessito colocá-la num formato próximo de retrato 3x4. Apenas redimensionar a imagem não surtiu um efeito muito bom.

Se alguém puder me dar uma luz, agradeceria muito.
Clenilton Alencar
Minigui Extended 18.06 -> 19.04
BRMake 2.05
Borland C++
Avatar de usuário

nilton579
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 31
Data de registro: 05 Fev 2008 19:23
Cidade/Estado: MANAUS
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

Cortar imagem

Mensagempor asimoes » 16 Fev 2018 15:07

Usa hbfimage (freeimage)
â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Cortar imagem

Mensagempor Claudio Soto » 16 Fev 2018 15:26

En cualquiera de las dos HMG esta disponible la lib BT

http://www.hmgforum.com/hmgdoc/BosTauru ... eGuide.htm
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Cortar imagem

Mensagempor nilton579 » 19 Fev 2018 09:00

Bom-dia!

@ aSimoes: não consegui encontrar documentação sobre hbfimage. Teria um link que possa informar?

@Claudio Souto: infelizmente, a BosTaurus só permite redimensionar a imagem, e não cortar. O que necessito é cortar parte de uma imagem paisagem para compor uma imagem retrato.

Sigo pesquisando. Obrigado pela ajuda!
Clenilton Alencar
Minigui Extended 18.06 -> 19.04
BRMake 2.05
Borland C++
Avatar de usuário

nilton579
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 31
Data de registro: 05 Fev 2008 19:23
Cidade/Estado: MANAUS
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

Cortar imagem

Mensagempor sygecom » 19 Fev 2018 10:02

Clenilton, bom dia.

Aqui uso a rotina abaixo, é um exemplo pra diminuir o tamanho da imagem, não sei se ajuda.

FUNCTION MAIN()
DIMINUI_IMAGEM_PORT('TESTE.JPG')
RETURN(.T.)

********************************
FUNCTION DIMINUI_IMAGEM_PORT(vARQ)
********************************
Local aArq := {}
Local oImage_tam
Local cFILE_TEMP := GERAFILE()+".jpg"  // gera um nome de arquivo temporario
LOCAL P1:=0,PX2:=0,PX1:=0,P2:=0

TRY
     fCLOSE(vARQ)
   __CopyFile(vARQ,(cFILE_TEMP))
CATCH
   ShowMsg('Erro ao tentar redimensionar a imagem, favor revisar as permissão de usuário do Windows')
END

#IfDef __XHARBOUR__
   oImage_tam := GDImage():LoadFromFile( cFILE_TEMP )
#else
   oImage_tam := GDImage():LoadFromJpeg( cFILE_TEMP )
#endif
p1:=oImage_tam:Width()     //800
p2:=oImage_tam:Height()    //600

px1:=(p1*10)/100  // fica com apenas 90 porcento da imagem, ou seja tirou apenas 10 porcento
px2:=(p2*10)/100  // fica com apenas 90 porcento da imagem, ou seja tirou apenas 10 porcento

oImage_tam:Resize( px1 , px2 )
oImage_tam:SaveJpeg(cFILE_TEMP)
#IfDef __XHARBOUR__
   gdImageDestroy(oImage_tam)
#endif
oImage_tam:=Nil
Return(cFILE_TEMP)


Nota: Tem que anexar ao seu script de compilação as lib GD( libbgd.lib e gdlib.lib) a libbgd.lib é gerada a partir da bgd.dll,

Download bgd.dll from this link:
http://www.boutell.com/gd/http/gdwin32.zip

Para gerar a lib a partir da DLL uso assim:
D:\devel\bcc72\bin\impdef -a libbgd.def bgd.dll
D:\devel\bcc72\bin\implib -a libbgd.lib libbgd.def
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Cortar imagem

Mensagempor nilton579 » 19 Fev 2018 10:08

Agradeço demais a ajuda. Mas preciso mesmo é cortar a imagem.

Vi que a bibliteca hbfimage provavelmente tem esse recurso, pois existe a função "FI_COPY" em que se informam as coordenadas da imagem a serem copiadas para geração de nova imagem. No entanto, não existe nenhuma documentação ou código para estudo.
Clenilton Alencar
Minigui Extended 18.06 -> 19.04
BRMake 2.05
Borland C++
Avatar de usuário

nilton579
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 31
Data de registro: 05 Fev 2008 19:23
Cidade/Estado: MANAUS
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

Cortar imagem

Mensagempor asimoes » 19 Fev 2018 13:46

Para redimensionar a imagem:

Não testei mas a FI_COPY deve fazer o recorte da imagem
cPng := "TESTE.PNG"

Fi_Initialise()

   image := Fi_Load( FIF_PNG, cPng, PNG_DEFAULT )

   width   := 300
   
   height  := 200
   
   rescale := fi_Rescale( image, width, height, FILTER_BICUBIC )
   
   Fi_Save( FIF_PNG, rescale, "rescale.png", PNG_DEFAULT )
   
Fi_DeInitialise()
â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Cortar imagem

Mensagempor Claudio Soto » 19 Fev 2018 14:18

Clenilton:

BT_BitmapClone (hBitmap, Row, Col, Width, Height)

Clones the specified bitmap and returns a handle to the cloned bitmap.

hBitmap: is a handle to the origin bitmap.

Row, Col, Width, Height: specifies the dimensions in pixels of the rectangle to clone. For default: Row = 0, Col = 0, Width = BT_BitmapWidth(hBitmap), Height = BT_BitmapHeight(hBitmap).
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Cortar imagem

Mensagempor nilton579 » 19 Fev 2018 14:41

Meu código está assim:

nmx := diskname()+":\"+curdir()+"\fotos\fotocut"+left(time(),2)+substr(time(),4,2)+".bmp"
nm := alltrim(oform.txt_arquivo.value)

fi_initialise()

imagem1 := fi_load(FIF_JPEG, nm , JPEG_DEFAULT )

imagem2 := fi_copy( imagem1 , 0,40,230,240)

oform.oimage.value := imagem2

fi_save( FIF_JPEG , imagem2 , nmx , JPEG_DEFAULT )

fi_unload(imagem1)
fi_unload(imagem2)

fi_deinitialise()

O erro ocorre na linha do fi_save, erro de parâmetros.
Clenilton Alencar
Minigui Extended 18.06 -> 19.04
BRMake 2.05
Borland C++
Avatar de usuário

nilton579
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 31
Data de registro: 05 Fev 2008 19:23
Cidade/Estado: MANAUS
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

Cortar imagem

Mensagempor asimoes » 19 Fev 2018 14:57

Esse erro tem haver com o tamanho da imagem que você quer cortar, pode estar maior que a original.

ops nmx veja essa variável você está tentando salvar um bmp como jpg ?

Os parâmetros

int left, int top, int right, int bottom
â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Cortar imagem

Mensagempor nilton579 » 19 Fev 2018 15:29

asimoes escreveu:Esse erro tem haver com o tamanho da imagem que você quer cortar, pode estar maior que a original.

ops nmx veja essa variável você está tentando salvar um bmp como jpg ?

Os parâmetros

int left, int top, int right, int bottom


Caraca!!! Era isso mesmo!

Muito obrigado, amigo !!!
Clenilton Alencar
Minigui Extended 18.06 -> 19.04
BRMake 2.05
Borland C++
Avatar de usuário

nilton579
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 31
Data de registro: 05 Fev 2008 19:23
Cidade/Estado: MANAUS
Curtiu: 4 vezes
Mens.Curtidas: 0 vez




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google Adsense [Bot], HASA e 5 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