Cortar imagem

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

Moderador: Moderadores

Avatar do usuário
nilton579
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 05 Fev 2008 20:23
Localização: MANAUS
Contato:

Cortar imagem

Mensagem por nilton579 »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cortar imagem

Mensagem por asimoes »

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)
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Cortar imagem

Mensagem por Claudio Soto »

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 do usuário
nilton579
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 05 Fev 2008 20:23
Localização: MANAUS
Contato:

Cortar imagem

Mensagem por nilton579 »

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 do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Cortar imagem

Mensagem por sygecom »

Clenilton, bom dia.

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

Código: Selecionar todos

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:

Código: Selecionar todos

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
Avatar do usuário
nilton579
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 05 Fev 2008 20:23
Localização: MANAUS
Contato:

Cortar imagem

Mensagem por nilton579 »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cortar imagem

Mensagem por asimoes »

Para redimensionar a imagem:

Não testei mas a FI_COPY deve fazer o recorte da imagem

Código: Selecionar todos

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)
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Cortar imagem

Mensagem por Claudio Soto »

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 do usuário
nilton579
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 05 Fev 2008 20:23
Localização: MANAUS
Contato:

Cortar imagem

Mensagem por nilton579 »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cortar imagem

Mensagem por asimoes »

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 do usuário
nilton579
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 05 Fev 2008 20:23
Localização: MANAUS
Contato:

Cortar imagem

Mensagem por nilton579 »

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++
Responder