http://vfpimaging.blogspot.com/2007/11/how-to-create-text-as-image-file-with.html
Autor: Cesar Ch.
Traducido por: Luis María Guayán
Más que una vez que he visto a la gente pedir como crear imágenes que contengan algún texto. El ejemplo de abajo es realmente muy simple.
- Crear una fuente
- Medir el espacio que el texto necesitará
- Crear una imagen con el tamaño necesario
- Dibujar el texto
- Guardar en el disco
Para ejecutar se requiere VFP9 y GdiPlusX.

Por favor, asegúrese de que tiene la última versión, porque VFPPaint utiliza algunas de las funciones que se han añadido recientemente.
https://github.com/VFPX/GDIPlusX
DO LOCFILE("System.app")
WITH _SCREEN.SYSTEM.Drawing
LOCAL lcText
lcText = "GdiPlusX is Cool !!!"
* Crear una fuante
LOCAL loFont AS xfcFont
loFont = _SCREEN.SYSTEM.Drawing.FONT.New("Verdana", 32, .FontStyle.BoldItalic)
LOCAL loTmpBmp AS xfcBitmap
loTmpBmp = .BITMAP.New(1,1)
* Recuperar el objeto gráfico
LOCAL loTmpGfx AS xfcGraphics
loTmpGfx = .Graphics.FromImage(loTmpBmp)
* Medir la cadena
* tomar el tamaño necesario para el texto
LOCAL loSize AS xfcSize
loSize = loTmpGfx.MeasureString(lcText, loFont)
LOCAL loNewBmp AS xfcBitmap
loNewBmp = .BITMAP.New(CEILING(loSize.WIDTH),CEILING(loSize.HEIGHT))
LOCAL loNewGfx AS xfcGraphics
loNewGfx = .Graphics.FromImage(loNewBmp)
* Hacer el fondo amarillo
loNewGfx.CLEAR(.COLOR.Yellow)
* Crear un pincel sólido
LOCAL loBrush AS xfcSolidBrush
loBrush = .SolidBrush.New(.COLOR.FromRGB(255,0,0)) && Rojo
* Crear un objeto StringFormat para dibujar el texto centrado en la imagen
LOCAL loStringFmt AS xfcStringFormat
loStringFmt = .StringFormat.New()
loStringFmt.ALIGNMENT = .StringAlignment.CENTER
* Crear un ractángulo con las medidas del Bitmap
LOCAL loRect AS xfcRectangleF
loRect = loNewBmp.GetBounds()
* Dibujar la cadena
loNewGfx.DrawString(lcText, loFont, loBrush, loRect, loStringFmt)
* Finalmente guardar la imagen
lcImage = ADDBS(GETENV("TEMP"))+"MyText.Png"
loNewBmp.SAVE(lcImage, .Imaging.ImageFormat.Png)
* Mostrar la imagen
DECLARE INTEGER ShellExecute IN shell32.DLL ;
INTEGER hndWin, STRING cAction, STRING cFileName, ;
STRING cParams, STRING cDir, INTEGER nShowWin
? ShellExecute(0, "Open", lcImage , "", "", 1)
ENDWITH
Buen día. Muchas gracias por esto. Hasta ahora no pude hacerlo andar.
ResponderBorrarloSize = loTmpGfx.MeasureString(lcText, loFont)
Me dice que loTmpGfx no es un objeto
Hola. A mí me dice:
ResponderBorrarLa propiedad "Ceiling" no se encuentra. Tengo VFP9...7423.
LOCAL loNewBmp as xfcBitmap
loNewBmp = .Bitmap.New(loSize.Ceiling)
Le doy Cancelar. Y si vuelvo a ejecutar, me aparece el error que dice anónimo.
Ceiling es un método, no una propiedad. Ya está corregido en el artículo.
BorrarGracias por el aviso.
Luis. Quiero comprender esto mejor....Creo un .prg y adiciono el codigo tuyo.... pero genera errores. GRACIAS por tu ayuda.
ResponderBorrarlUIS Maria. Puedes colaborar, ya que ESTA linea. Continua sacando error. loNewBmp = .Bitmap.New(loSize.Ceiling())
ResponderBorrarYa está corregido el código del artículo.
BorrarSí, Luis. Probado y ok.
Borrar