12 de octubre de 2017

Como crear texto como un archivo de imagen con GdiPlusX

Artículo original: How to create text as image file with GdiPlusX
http://weblogs.foxite.com/vfpimaging/archive/2007/11/24/5428.aspx
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
IMPORTANTANTE
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.prg")

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(loSize.Ceiling())

   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
   loNewBmp.Save("c:\MyText.Png", .Imaging.ImageFormat.Png)

   * Mostrar la imagen
   RUN /N Explorer.exe c:\Mytext.Png
ENDWITH


3 comentarios :

  1. Buen día. Muchas gracias por esto. Hasta ahora no pude hacerlo andar.
    loSize = loTmpGfx.MeasureString(lcText, loFont)
    Me dice que loTmpGfx no es un objeto

    ResponderEliminar
  2. Hola. A mí me dice:
    La 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.

    ResponderEliminar
    Respuestas
    1. Ceiling es un método, no una propiedad. Ya está corregido en el artículo.

      Gracias por el aviso.

      Eliminar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.