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