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


1 comentario :

  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

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