Página 1 de 1

Cortar imagem

Enviado: 16 Fev 2018 12:07
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.

Cortar imagem

Enviado: 16 Fev 2018 16:07
por asimoes
Usa hbfimage (freeimage)

Cortar imagem

Enviado: 16 Fev 2018 16:26
por Claudio Soto
En cualquiera de las dos HMG esta disponible la lib BT

http://www.hmgforum.com/hmgdoc/BosTauru ... eGuide.htm

Cortar imagem

Enviado: 19 Fev 2018 09:00
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!

Cortar imagem

Enviado: 19 Fev 2018 10:02
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

Cortar imagem

Enviado: 19 Fev 2018 10:08
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.

Cortar imagem

Enviado: 19 Fev 2018 13:46
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()

Cortar imagem

Enviado: 19 Fev 2018 14:18
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).

Cortar imagem

Enviado: 19 Fev 2018 14:41
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.

Cortar imagem

Enviado: 19 Fev 2018 14:57
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

Cortar imagem

Enviado: 19 Fev 2018 15:29
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 !!!