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 !!!