Mira si te sirve esto:
* ---------------------------------------------------------------------------------
* ImgRedim
* Vers. 1.0
* ---------------------------------------------------------------------------------
* Librería para redimensionar una imagen, pasando un valor en pixels, que se tomará
* como valor máximo para la anchura o altura, según la orientación de la imagen.
* La imagen resultante será '.BMP'
*
* Tanto la imagen origen como la destino deben incluir su ruta.
*
* Si se omite la imagen destino, se tomará el de la origen, precedido por 'rsz_'
*
* USO:
* NewImg = ImgRedim(m.cArchivoOriginal, m.nTamano, m.cArchivoDestino)
*
* Parametros:
* m.cArchivoOriginal (Oblig.) Ruta y nombre de la imagen origen
* m.nTamano (Oblig.) Tamaño máx. para ancho/alto (minimo 100)
* m.cArchivoDestino (Opc.) Ruta y nombre de la imagen redimensionada
*
*
* EJEMPLOS:
* NewImg = ImgRedim('c:\fotos\img334.jpg',350,'c:\destino\imagen334')
* --> NewImg = 'c:\destino\imagen334.bmp'
*
* NewImg = ImgRedim('c:\fotos\img334.jpg',100)
* --> NewImg = 'c:\destino\imagen334.bmp'
*
* NOTA: Si se devuelve un 'string' vacío, falló la redimensión
* ---------------------------------------------------------------------------------
Parameters m.cArchivoOriginal, m.nTamano, m.cArchivoDestino
Local m.cNombreTemporal, m.cRutaTemporal
*
m.cNombreTemporal = ''
*
If Vartype(m.cArchivoOriginal)<>'C'
Return m.cNombreTemporal
Else
If Empty(m.cArchivoOriginal)
Return m.cNombreTemporal
Endif
Endif
If Vartype(m.nTamano)<>'N'
Return m.cNombreTemporal
Else
If m.nTamano < 100
m.nTamano = 100
Endif
Endif
If Vartype(m.cArchivoDestino)<>'C'
m.cArchivoDestino = ''
Endif
Do Locfile("
system.app")
With _Screen.System.Drawing
* Establecer archivo destino por omision
If Empty(Juststem(m.cArchivoDestino))
m.cArchivoDestino = 'rsz_' + Juststem(m.cArchivoOriginal)
Endif
* Establecer ruta destino
m.cRutaTemporal = Addbs(Justpath(m.cArchivoDestino))
If Empty(m.cRutaTemporal)
m.cRutaTemporal = Addbs(Sys(5)+Sys(2003))
Endif
* Variables para almacenar el nuevo tamaño de la imagen
Local lnWidth, lnHeight
Store m.nTamano To lnWidth, lnHeight
* Cargar la imagen original
Local loSrcImage As xfcBitmap
loSrcImage = .Bitmap.New(m.cArchivoOriginal)
* Calculos para respetar proporcion imagen
nPropor = Max(loSrcImage.width / m.nTamano, loSrcImage.height / m.nTamano)
lnWidth = Int(loSrcImage.width / nPropor)
lnHeight = Int(loSrcImage.height / nPropor)
m.cNombreTemporal = m.cRutaTemporal + Juststem(m.cArchivoDestino) + '.bmp'
* Crea una nueva imagen con el tamaño deseado
Local loResized As xfcBitmap
loResized = .Bitmap.New(lnWidth, lnHeight,.Imaging.PixelFormat.Format32bppARGB)
* Fija la resolución de la imagen para que sea la misma que la original
loResized.SetResolution(loSrcImage.HorizontalResolution, loSrcImage.VerticalResolution)
* Crea un objeto Graphics para poder obtener los derechos de dibujar sobre el
Local loGfx As xfcGraphics
loGfx = .Graphics.FromImage(loResized)
* Establece algunas propiedades para asegurarse de tener la mejor calidad de la imagen
loGfx.SmoothingMode = .Drawing2D.SmoothingMode.HighQuality
loGfx.InterpolationMode = .Drawing2D.InterpolationMode.HighQualityBicubic
* Dibuja la imagen original en la nueva imagen con las dimensiones deseadas
loGfx.DrawImage(loSrcImage, 0, 0, lnWidth, lnHeight)
* Guarda la imagen redimensionada como Png
loResized.Save(m.cNombreTemporal, .Imaging.ImageFormat.bmp)
If !File(m.cNombreTemporal)
m.cNombreTemporal = ''
Endif
*
Return m.cNombreTemporal
Endwith