http://weblogs.foxite.com/vfpimaging/archive/2007/11/14/5404.aspx
Autor: Cesar Ch. (http://weblogs.foxite.com/vfpimaging)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)
La siguiente función convierte cualquier imagen de botón en BMP para ser utilizado en formularios VFP.
Existen muchos iconos gratis y disponibles en la red; pero la gran mayoría tienen formatos ICO, GIF o PNG, que no son muy fiables para ser utilizadas en VFP. Para nosotros, el mejor formato de imagen, por muchas razones, es el formato BMP.
Son necesarias algunas transformaciones para hacer que este BMP muestre exactamente cómo que se desea, especialmente cuando convierte algunas imágenes originales en formato PNG, GIF o ICO.
VFP muestra el blanco puro - RGB(255,255,255) como transparente en nuestros botones y objetos image. El código que se muestra a continuación, convierte primero el blanco original a RGB(254,254,254) que visualmente es lo mismo; pero no se vuelve transparente y elimina la necesidad de crear una máscara de imagen (MSK) y además, convierte el color de fondo del bitmap original en blanco puro, lo que provocará que se muestre transparente en formularios VFP.
Para más detalles compruebe, por favor, estos escritos:
BMPs with Transparent Backgrounds
How to put one image over another in a form
IMPORTANTE
Necesita VFP9 y GdiPlusX para ejecutarlo
Asegúrese de que tiene la última versión, debido a que este ejemplo puede estar utilizando algunas funciones que hemos agregados o reparado recientemente.
http://www.codeplex.com/VFPX/Wiki/View.aspx?title=GDIPlusX&referringTitle=Home
Guarde el programa siguiente como BUTTON2BMP.PRG y llámelo de esta forma:
Button2Bmp(GETPICT(), "c:\NewIcon.bmp")Cuando compile este programa en su ejecutable, no olvide, por favor, quitar el comando
LOCFILE()
, en su lugar, emplee: Do System.prg
LPARAMETERS tcSourceFile, tcDestFile DO LOCFILE("System.prg") LOCAL loBmp AS xfcBitmap LOCAL loGfx AS xfcGraphics LOCAL loBorderClr AS xfcColor LOCAL loRect AS xfcRectangle LOCAL loAttr AS xfcImageAttributes LOCAL loColorMap AS xfcColorMap WITH _SCREEN.SYSTEM.Drawing loColorMap = .Imaging.ColorMap.New() loAttr = .Imaging.ImageAttributes.New() loBmp = .Bitmap.FromFile(tcSourceFile) loGfx = .Graphics.FromImage(loBmp) loRect = loBmp.GetBounds() * Toma el color del pixel que está más arriba a la izquierda, * asumiendo que este color es el color de fondo BackGround para volverlo transparente * Para nuestro BMP, será BLANCO PURO - RGB(255,255,255) * que se convierte en transparente en objetos VFP loBorderClr = loBmp.GetPixel(0,0) * Convierte los blancos originales RGB(255,255,255) a OFF WHITE - RGB(254,254,254) * de esta forma, los blancos se mantendrán, sin necesidad de máscara loColorMap.OldColor = .Color.White loColorMap.NewColor = .Color.FromARGB(255,254,254,254) loAttr.SetRemapTable(loColorMap) loGfx.DrawImage(loBmp, loRect, loRect, .GraphicsUnit.Pixel, loAttr) * El siguiente paso, convertir los bordes en blanco puro, RGB(255,255,255) * que lo convertirá en transparente en los botones. loColorMap.OldColor = loBorderClr loColorMap.NewColor = .Color.White loAttr.SetRemapTable(loColorMap) loGfx.DrawImage(loBmp, m.loRect, m.loRect, .GraphicsUnit.Pixel, loAttr) loBmp.Save(tcDestFile, .Imaging.ImageFormat.Bmp) ENDWITH
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.