Pido disculpas:
lo copié y pegué tal y como lo uso según mi programa. Claramente
ZeRoberto lo entendió muy bien así, pero posiblemente alguien menos experto (el león juzga según su condición...) podría confundirse cuando le salga algún mensaje de error. Por eso, lo posteo de nuevo con mayores aclaraciones:
* ADVERTENCIA: Para que el siguiente ejemplo te funcione, debes tener incluidos en
* en la misma carpeta de tu aplicación, los archivos _GDIPLUS.VCT y _GDIPLUS.VCX
* Si no los tuvieras incluídos en la misma carpeta, deberás indicarle en donde ubicar
* estas librerías visuales.
* OriPic = Archivo de imagen original
* M.AnchoP = Nuevo ancho a asignar
* M.AltoPi = Nuevo alto a asignar
* M.RecPic = Nuevo Archivo creado con los nuevos tamaños asignados
PROCEDURE Recortar_IMG
PARAMETERS M.OriPic, M.AnchoP, M.AltoPi, M.RecPic, M.PatGDI
SET CLASSLIB TO _gdiplus.vcx ADDITIVE
* Cargar la imagen a Gdiplus
loImage = NEWOBJECT("GpImage")
loImage.CreateFromFile(M.OriPic)
lnWidth = loImage.ImageWidth
lnHeight = loImage.ImageHeight
* Recortar imagen a los pixeles solicitados
loCropped = Crop(loImage, 0, 0, M.Anchop, M.AltoPi)
IF FILE(M.RecPic)
ERASE (M.RecPic)
ENDIF
DO CASE
CASE UPPER(ALLTRIM(RIGHT(M.OriPic,3))) = "BMP"
loCropped.SavetoFile(M.RecPic,"image/bmp")
CASE UPPER(ALLTRIM(RIGHT(M.OriPic,3))) = "PNG"
loCropped.SavetoFile(M.RecPic,"image/png")
ENDCASE
RELEASE loImage, loCropped
RELEASE CLASSLIB _gdiplus.vcx
RETURN
PROCEDURE Crop(toImage, x, Y, tnWidth, tnHeight, tnPixelFormat)
IF VARTYPE(tnPixelFormat) = "L"
tnPixelFormat = toImage.PixelFormat
ENDIF
DECLARE LONG GdipCloneBitmapAreaI IN GDIPLUS.DLL ;
LONG x, LONG Y, LONG nWidth, LONG nHeight, ;
LONG PixelFormat, LONG srcBitmap, LONG @dstBitmap
LOCAL lnNewBitmap
lnNewBitmap = 0
= GdipCloneBitmapAreaI(x, Y, tnWidth, tnHeight, ;
tnPixelFormat, toImage.GetHandle(), @lnNewBitmap)
LOCAL loNewImage
loNewImage = NEWOBJECT("GpBitmap", "_gdiplus.vcx")
loNewImage.SetHandle(lnNewBitmap)
RETURN loNewImage
ENDPROC
Podrán encontrar mas funciones para manipular imágenes compartidas generosamente por el maestro César Chalom en
www.portalfox.com
Salu2,
Edgar Acevedo