http://doughennig.blogspot.com/2007/02/creating-gradient-images-fast-and-easy.html
Autor: Doug Hennig
Traducido por: Ana María Bisbé York
He estado intentando últimamente embellecer algunos formularios. Una vía para hacer un formulario atractivo es utilizar algún elemento gráfico. En particular, me gustan las imágenes degradadas, como se ilustra en esta imagen de la pantalla (el degradado aparece vinculado a la imagen; pero no en el formulario real):
Entonces, ¿cómo crear una imagen con color degradado de los colores y tamaño deseados? Aunque yo podría hacerlo dinámicamente utilizando la biblioteca VFPX GDIPlusX, como ha descrito Cesar Ch. en varias entradas de su excelente Blog, he decidido simplemente crear un archivo imagen y emplearlo como la propiedad Picture de un objeto Image.
Con alguna ayuda del blog de Cesar, he creado un programa sencillo, CreateGradient.PRG, que genera una imagen degradada con el archivo especificado, tamaño y colores. El color se auto-explica. Tenga en cuenta que se espera que la librería de clases GDIPlus estén en la raíz de VFP.
lparameters tcFileName, ; tnHeight, ; tnWidth, ; tnColor1, ; tnColor2 local lnColor1, ; lnColor2, ; lnMode, ; lnFormat, ; loSystem, ; lcExt, ; loBitmap, ; loRect, ; loGfx, ; loGradBrush * Asegúrese de que fueron pasados los parámetros. if vartype(tcFileName) <> 'C' or empty(tcFileName) or ; vartype(tnHeight) <> 'N' or vartype(tnWidth) <> 'N' error 11 return .F. endif vartype(tcFileName) <> 'C' ... * Si no se han pasado los colores, pídalos. if pcount() < 4 lnColor2 = getcolor(rgb( 0, 128, 255)) lnColor1 = getcolor(rgb(255, 255, 255)) else lnColor1 = tnColor1 lnColor2 = tnColor2 endif pcount() < 4 * Esto asume un degradado horizontal. * Configure lnMode a un valor diferente para los otros tipos. lnMode = 0 * Crea un objeto GDIPlusX System. loSystem = newobject('xfcSystem', 'System.vcx') with loSystem.Drawing * Determina el tipo de la imagen de la extensión del archivo. lcExt = upper(justext(tcFileName)) do case case lcExt = 'PNG' lnFormat = .Imaging.ImageFormat.Png case lcExt = 'BMP' lnFormat = .Imaging.ImageFormat.Bmp case lcExt = 'GIF' lnFormat = .Imaging.ImageFormat.Gif case inlist(lcExt, 'JPG', 'JPEG') lnFormat = .Imaging.ImageFormat.Jpeg case lcExt = 'ICO' lnFormat = .Imaging.ImageFormat.Icon case inlist(lcExt, 'TIF', 'TIFF') lnFormat = .Imaging.ImageFormat.Tiff case lcExt = 'WMF' lnFormat = .Imaging.ImageFormat.Wmf otherwise error 11 return .F. endcase * Crea un objeto bitmap y un objeto rectangle del tamaño deseado. loBitmap = .Bitmap.New(tnWidth, tnHeight) loRect = .Rectangle.New(0, 0, tnWidth, tnHeight) * Crea un objeto graphics. loGfx = .Graphics.FromImage(loBitmap) loGfx.Clear(.Color.White) * Crea una brocha de degradado lineal. loGradBrush = .Drawing2D.LinearGradientBrush.New(loRect, ; .Color.FromRgb(lnColor1), .Color.FromRgb(lnColor2), lnMode) * Llena el rectángulo con la brocha de degradado lineal. loGfx.FillRectangle(loGradBrush, loRect) * Guarda la imagen con el archivo especificado. loBitmap.Save(tcFileName, lnFormat) endwith return
Gracias a Craig Boyd, Bo Durban, y Cesar por todo el trabajo que han hecho en esta increíble biblioteca de clases.