Grupo, a mi este ejemplo me sirvio para almacenar las imagenes jpg de un
tamaƱo aceptable, ya que si bien le permitia al usuario elegir cualquier jpg
para poner luego en su reporte, algunos usuarios elegian imagenes muy
grandes y a la hora de almacenarlas o cargarlas en la pantalla tardaban
demasiado y a veces no se cargaban.
Si bien esto no resuelve el problema de Carlos del dia 30, quizas ayude a
que nuestras aplicaciones consuman menos memoria.
Esta es la funcion resultante de ese dia,
LPARAMETERS lcImagenOri,lcImagenDes,lnAlto,lnAncho
#DEFINE GDIPLUS_PIXELFORMAT_1bppIndexed 0x00030101
#DEFINE GDIPLUS_PIXELFORMAT_4bppIndexed 0x00030402
#DEFINE GDIPLUS_PIXELFORMAT_8bppIndexed 0x00030803
#DEFINE GDIPLUS_PIXELFORMAT_16bppGrayScale 0x00101004
#DEFINE GDIPLUS_PIXELFORMAT_16bppRGB555 0x00021005
#DEFINE GDIPLUS_PIXELFORMAT_16bppRGB565 0x00021006
#DEFINE GDIPLUS_PIXELFORMAT_16bppARGB1555 0x00061007
#DEFINE GDIPLUS_PIXELFORMAT_24bppRGB 0x00021808
#DEFINE GDIPLUS_PIXELFORMAT_32bppRGB 0x00022009
#DEFINE GDIPLUS_PIXELFORMAT_32bppARGB 0x0026200A
#DEFINE GDIPLUS_PIXELFORMAT_32bppPARGB 0x000E200B
#DEFINE GDIPLUS_PIXELFORMAT_48bppRGB 0x0010300C
#DEFINE GDIPLUS_PIXELFORMAT_64bppPARGB 0x001C400E
LOCAL loVFPImg,lnWidth,lnHeight
LOCAL loImage AS GpImage OF ffc/_gdiplus.vcx
LOCAL loBitmap AS GpBitmap OF ffc/_gdiplus.vcx
LOCAL loGraphics as GpGraphics OF HOME() + ffc/_gdiplus.vcx
LOCAL lnNewWidth, lnNewHeight
* Averiguo dimensiones de la imagen original
loVFPImg = CREATEOBJECT("Image")
loVFPImg.Picture = lcImagenOri
lnWidth = loVFPImg.Width
lnHeight = loVFPImg.Height
loVFPImg = NULL
loImage = NEWOBJECT("GpImage", HOME() + "ffc/_gdiplus.vcx")
loImage.CreateFromFile(lcImagenOri)
loBitmap = NEWOBJECT("GpBitmap", HOME() + "ffc/_gdiplus.vcx")
loGraphics = NEWOBJECT('GpGraphics',HOME() + 'ffc/_gdiplus.vcx')
* Determino ancho y alto para que no se deforme la imagen resultante
IF lnWidth>lnHeight
lnNewWidth = lnAncho
lnPje=INT(lnNewWidth*100/lnWidth)
lnNewHeight=INT(lnHeight*lnPje/100)
ELSE
lnNewHeight = lnAlto
lnPje=INT(lnNewHeight*100/lnHeight)
lnNewWidth=INT(lnHeight*lnPje/100)
ENDIF
loBitmap.Create(lnNewWidth, lnNewHeight, GDIPLUS_PIXELFORMAT_32bppPARGB)
loGraphics.CreateFromImage(loBitmap)
loGraphics.DrawImageScaled(loImage, 0, 0, lnNewWidth, lnNewHeight)
loBitmap.SaveToFile(lcImagenDes, "image/jpeg")
Espero que a alguien mas le sirva.
Debo aclarar que yo lo hice con Jpg pero puede ser hecho con otros formatos
de imagen.
Saludos,
Pancho
Cordoba