En este escrito, Cesar Chalom muestra tres ejemplos de empleo de GDI+ para obtener imágenes al vuelo, partiendo del código de Bernard Bout.
Ejemplos de código en VFP -X GDI+ para "Recrear fichas de notas en VFP9" por Bernard
Artículo original: VFP -X GDI+ code samples for "Recreating One Note Tabs in VFP9" from Bernard
http://weblogs.foxite.com/cesarchalom/archive/2006/08/13/2199.aspx
Autor: Cesar Chalom (http://weblogs.foxite.com/cesarchalom)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)
Ahora Bernard Bout me debe dos entradas de blog :-))
Debajo hay algunas imágenes de Bernard Bout, que muestran algunos formularios muy interesantes que ha creado. Para facilitarle el trabajo, mostraré cómo crear la imagen al vuelo que utiliza para crear estos ejemplos, utilizando las nuevas clases desde el proyecto GDIPlus-X, disponible desde CodePlex.
Se puede obtener más información en el Blog de Bernard: "Recreating One Note Tabs in VFP9"


EJEMPLO 1: ON_BIGTAB
 La imagen agrandada 8 veces
 Imagen original en tamaño original
** Crea una imagen ON_BIGTAB.PNG para ser utilizada en el ejemplo
** "One Note Tabs" de Bernard Bout
** - una imagen 112x20 píxeles, con un polígono irregular con un borde azul
** y relleno con un color naranja degradado
_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx","vcx")))
* Define los colores que serán utilizados
LOCAL lnRGBStartGradClr, lnRGBEndGradClr
lnRGBStartGradClr = RGB(253,233,218) && naranja claro
lnRGBEndGradClr = RGB(247,182,131) && naranja
lnRGBBorderClr = RGB(59,97,156) && azul oscuro
WITH _SCREEN.System.Drawing
LOCAL loBitmap AS xfcBitmap
LOCAL loGfx AS xfcGraphics
LOCAL loGradBrush AS xfcLinearGradientBrush
LOCAL loPen AS xfcPen
LOCAL loRect AS xfcRectangle
* Crea un bitmap nuevo de 112x20 en el formato predeterminado PixelFormat - 32bppARGB
loBitmap = .Bitmap.New(112,20)
* Crea un objeto Graphics que podrá dibujar en el bitmap
loGfx = .Graphics.FromImage(loBitmap)
loGfx.Clear(.Color.White) && blanco
* Crea un objeto Rectangle para la brocha de color degradado lineal
loRect = .Rectangle.New(0,0,112,19) && Tamaño del bitmap
* Crea una brocha de color degradado lineal - LinearGradientBrush
loGradBrush = .Drawing2D.LinearGradientBrush.New(loRect,;
.Color.FromRgb(lnRGBStartGradClr), .Color.FromRgb(lnRGBEndGradClr),1)
DIMENSION laPoints(6)
laPoints(1) = .Point.New(0,20)
laPoints(2) = .Point.New(17,4)
laPoints(3) = .Point.New(21,2)
laPoints(4) = .Point.New(109,2)
laPoints(5) = .Point.New(110,4)
laPoints(6) = .Point.New(110,20)
* Llena el polígono con la brocha Gradient Brush
loGfx.FillPolygon(loGradBrush, @laPoints)
* Crea un trazo, objeto Pen de color azul para dibujar el borde
loPen = .Pen.New(.Color.FromRGB(lnRGBBorderClr),1)
* Dibuja el borde azul
laPoints(1) = .Point.New(0,19)
laPoints(2) = .Point.New(17,2)
laPoints(3) = .Point.New(22,0)
laPoints(4) = .Point.New(109,0)
laPoints(5) = .Point.New(111,2)
laPoints(6) = .Point.New(111,18)
loGfx.DrawLines(loPen, @laPoints)
* Dibuja los pixels inferior-derechos
loBitmap.SetPixel(111,19,.Color.FromRGB(lnRGBEndGradClr))
loBitmap.SetPixel(110,19,.Color.FromRGB(lnRGBEndGradClr))
* Guarda la imagen
loBitmap.Save("c:\ON_BigTab.png", .Imaging.ImageFormat.Png)
ENDWITH
EJEMPLO 2: ON_SMALLTAB
 Imagen original agrandada 8 veces.
 Imagen original en tamaño original.
** Crea una imagen ON_SMALLTAB.PNG para ser utilizada en el ejemplo
** "One Note Tabs" de Bernard Bout
** - una imagen 16x8 píxeles, con un polígono irregular con un borde azul
** y relleno con un color naranja degradado
_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx","vcx")))
* Define los colores que serán utilizados
LOCAL lnRGBStartGradClr, lnRGBEndGradClr
lnRGBStartGradClr = RGB(255,232,197) && naranja claro
lnRGBEndGradClr = RGB(255,179,15) && naranja
lnRGBBorderClr = RGB(26,57,86) && azul oscuro
WITH _SCREEN.System.Drawing
LOCAL loBitmap AS xfcBitmap
LOCAL loGfx AS xfcGraphics
LOCAL loGradBrush AS xfcLinearGradientBrush
LOCAL loPen AS xfcPen
LOCAL loRect AS xfcRectangle
* Crea un bitmap nuevo de 16x8 en el formato predeterminado PixelFormat - 32bppARGB
loBitmap = .Bitmap.New(16,8)
* Crea un objeto Graphics que podrá dibujar en el bitmap
loGfx = .Graphics.FromImage(loBitmap)
loGfx.Clear(.Color.FromRgb(RGB(255,255,255))) && white
* Crea un objeto Rectangle para la brocha de color degradado lineal
loRect = .Rectangle.New(0,0,16,8) && Size of bitmap
* Crea una brocha de color degradado lineal - LinearGradientBrush
loGradBrush = .Drawing2D.LinearGradientBrush.New(loRect,;
.Color.FromRgb(lnRGBStartGradClr), .Color.FromRgb(lnRGBEndGradClr),1)
DIMENSION laPoints(5)
laPoints(1) = .Point.New(0,7)
laPoints(2) = .Point.New(0,2)
laPoints(3) = .Point.New(2,0)
laPoints(4) = .Point.New(8,0)
laPoints(5) = .Point.New(15,7)
* Llena el polígono con la brocha Gradient Brush
loGfx.FillPolygon(loGradBrush, @laPoints)
* Create a blue Pen object to draw border
loPen = .Pen.New(.Color.FromRGB(lnRGBBorderClr),1)
* Dibuja el polígono
loGfx.DrawPolygon(loPen, @laPoints)
* Guarda la imagen
loBitmap.Save("c:\ON_SmallTab.png", .Imaging.ImageFormat.Png)
ENDWITH
SAMPLE 3: ON_SMALLBUTTON
 Imagen original agrandada 8 veces
 Imagen resultante agrandada 8 veces
 Imagen original en tamaño original
 Imagen resultante en tamaño original
** Carga una imagen y dibuja un rectángulo personalizado utilizando un
** LinearGradientBrush; Crea un archivo image ON_SMALLBUTTON.PNG
** para ser utilizado en el ejemplo "One Note Tabs" de Bernard Bout
** - una imagen de112x20 píxeles, con un polígono irregular,
** con un borde azul y relleno con un color naranja degradado
_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx","vcx")))
* Define los colores a emplear
LOCAL lnRGBStartGradClr, lnRGBEndGradClr
lnRGBStartGradClr = RGB(253,232,197) && naranja claro
lnRGBEndGradClr = RGB(255,179,15) && naranja
WITH _SCREEN.System.Drawing
LOCAL loBitmap AS xfcBitmap
LOCAL loGfx AS xfcGraphics
LOCAL loGradBrush AS xfcLinearGradientBrush
LOCAL loRect AS xfcRectangle
* Carga el objeto Image
loBitmap = .Image.FromFile(GETPICT())
* Crea un objeto Graphics que podrá dibujar en el bitmap
loGfx = .Graphics.FromImage(loBitmap)
* Crea un objeto Rectangle para la brocha de color degradado lineal
loRect = .Rectangle.New(0,0,12,18)
* Crea una brocha de color degradado lineal - LinearGradientBrush
loGradBrush = .Drawing2D.LinearGradientBrush.New(loRect,;
.Color.FromRgb(lnRGBStartGradClr), .Color.FromRgb(lnRGBEndGradClr),1)
* Llena el polígono con la brocha Gradient Brush
loGfx.FillRectangle(loGradBrush, 3, 1, 12, 17)
* Guarda la imagen
loBitmap.Save("c:\ON_SmallButton.png", .Imaging.ImageFormat.Png)
ENDWITH
Nuevamente, ¡ esperemos por las futuras apariciones de Bernard !
|