Artículo original: Draw logos in your images with GdiPlusX
http://weblogs.foxite.com/vfpimaging/archive/2007/07/11/4315.aspx
Autor: Cesar Ch.
Traducido por: Luis Maria Guayán
Otra pregunta común que encuentro siempre en algunos foros de VFP es de gente que desea dibujar algunas imágenes, generalmente logos de la compañía sobre algunas imágenes. Esto es realmente simple, como demostraré mas abajo.
Para todos los ejemplos que proporcionaré, el logo de VFPX será dibujado en algunas imágenes mas grandes. Para demostrar toda la flexibilidad que GDI+ puede ofrecernos, algunos efectos serán aplicados al logo.
IMPORTANTE
Requiere VFP9 y GdiPlusX para funcionar.
¡Por favor asegúrese que tiene la última versión!
http://www.codeplex.com/VFPX/Wiki/View.aspx?title=GDIPlusX&referringTitle=Home
EJEMPLO 1: Dibujo la imagen sin la transformación
_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx"))) WITH _SCREEN.System.Drawing as xfcDrawing LOCAL lcMainPict, lcLogoPict LOCAL loMainBmp as xfcBitmap LOCAL loLogoBmp as xfcBitmap LOCAL loGfx as xfcGraphics lcMainPict = GETPICT() lcLogoPict = GETPICT() loMainBmp = .Bitmap.FromFile(lcMainPict) loLogoBmp = .Bitmap.FromFile(lcLogoPict) loGfx = .Graphics.FromImage(loMainBmp) *!* Ejemplo 1 *!* Imagen Original *!* Posicion : Borde superior izquierdo *!* Dibujo el logo sin ninguna transformación loGfx.DrawImage(loLogoBmp, 0, 0) loMainBmp.Save("c:\logo1.jpg", .Imaging.ImageFormat.Jpeg) * Muestro la imagen RUN /N explorer.exe c:\logo1.jpg ENDWITH
EJEMPLO 2: Convierto el fondo blanco de nuestro logo a transparente usando la función Bitmap.MakeTransparent()
_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx"))) WITH _SCREEN.System.Drawing as xfcDrawing LOCAL lcMainPict, lcLogoPict LOCAL loMainBmp as xfcBitmap LOCAL loLogoBmp as xfcBitmap LOCAL loGfx as xfcGraphics lcMainPict = GETPICT() lcLogoPict = GETPICT() loMainBmp = .Bitmap.FromFile(lcMainPict) loLogoBmp = .Bitmap.FromFile(lcLogoPict) loGfx = .Graphics.FromImage(loMainBmp) *!* Ejemplo 2 *!* Convierto el color seleccionado del logo con ALPHA 255 (Opaco) a ALPHA 0 (Transparente) *!* Posicion : Borde superior derecho * Fuerzo al fondo blanco del logo a hacerce transparente loLogoBmp.MakeTransparent(.Color.White) * Dibujo el logo en el borde superior derecho de la imagen LOCAL x1, y1 x1 = loMainBmp.Width - loLogoBmp.Width y1 = 0 loGfx.DrawImage(loLogoBmp, x1, y1) loMainBmp.Save("c:\logo2.jpg", .Imaging.ImageFormat.Jpeg) RUN /N explorer.exe c:\logo2.jpg ENDWITH
EJEMPLO 3: Dibujo el logo aplicando un 25% de transparencia a toda la imagen
La transparencia es aplicada a toda la imagen usando un ColorMatrix. La proporción de transparencia que es variedades de aplied de 0 (totalmente transparente) a 1 (totalmente opaca).
_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx"))) WITH _SCREEN.System.Drawing as xfcDrawing LOCAL lcMainPict, lcLogoPict LOCAL loMainBmp as xfcBitmap LOCAL loLogoBmp as xfcBitmap LOCAL loGfx as xfcGraphics lcMainPict = GETPICT() lcLogoPict = GETPICT() loMainBmp = .Bitmap.FromFile(lcMainPict) loLogoBmp = .Bitmap.FromFile(lcLogoPict) loGfx = .Graphics.FromImage(loMainBmp) *!* Ejemplo 3 *!* Dibujo el logo aplicando 25% de transparencia a toda la imagen *!* Posicion: Borde inferior izquierdo * La transparencia se aplica a toda la imagen * Defino el porcentaje de transparencia que sera aplicado * Este parámetro va desde 0 (totalmente transparente) a 1 (totalmente opaco) LOCAL lnTranspRatio lnTranspRatio = 0.25 && 25% * Creo una matriz de color tendra la información de la transformación * La posición (4,4) de la matriz es la responsable de la opacidad LOCAL loClrMatrix AS xfcColorMatrix loClrMatrix = .Imaging.ColorMatrix.New( ; 1, 0, 0, 0 , 0, ; 0, 1, 0, 0 , 0, ; 0, 0, 1, 0 , 0, ; 0, 0, 0, lnTranspRatio, 0, ; 0, 0, 0, 0 , 0) * Creo un objeto de atributos de imagen para crear los efectos basados en nuestra martiz de color LOCAL loAttr AS xfcImageAttributes loAttr = .Imaging.ImageAttributes.New() loAttr.SetColorMatrix(loClrMatrix) * Nececitamos crear un rectangulo que contendrá las coordenadas y el tamaño del logo transformado LOCAL loRect as xfcRectangle loRect = .Rectangle.New() loRect.X = 0 loRect.Y = loMainBmp.Height - loLogoBmp.Height loRect.Width = loLogoBmp.Width loRect.Height = loLogoBmp.Height * Dibujo la imagen transformada usando el rectángulo y el objeto de atributos de la imagen loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr) loMainBmp.Save("c:\logo3.jpg", .Imaging.ImageFormat.Jpeg) RUN /N explorer.exe c:\logo3.jpg ENDWITH
EJEMPLO 4: Dibujo el logo con el fondo transparente, con una transparencia global del 50%.
Aplico 100% de transparencia al color blanco para eliminar el fondo y dibujo el logo aplicando 50% de transparencia a la imagen entera, igual que en el ejemplo anterior.
_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx"))) WITH _SCREEN.System.Drawing as xfcDrawing LOCAL lcMainPict, lcLogoPict LOCAL loMainBmp as xfcBitmap LOCAL loLogoBmp as xfcBitmap LOCAL loGfx as xfcGraphics lcMainPict = GETPICT() lcLogoPict = GETPICT() loMainBmp = .Bitmap.FromFile(lcMainPict) loLogoBmp = .Bitmap.FromFile(lcLogoPict) loGfx = .Graphics.FromImage(loMainBmp) *!* Ejemplo 4 *!* Aplico 100% de transparencia a el color blanco para eliminar el fondo *!* Dibujo el logo aplicando 50% de transparencia a toda la imagen *!* Posicion: Borde superior izquierdo * Primer paso: Elimino el fondo blanco loLogoBmp.MakeTransparent(.Color.White) * Defino el porcentaje de transparencia que sera aplicado * Este parámetro va desde 0 (totalmente transparente) a 1 (totalmente opaco) LOCAL lnTranspRatio lnTranspRatio = 0.50 && 50% * Creo una matriz de color tendra la información de la transformación * La posición (4,4) de la matriz es la responsable de la opacidad LOCAL loClrMatrix AS xfcColorMatrix loClrMatrix = .Imaging.ColorMatrix.New( ; 1, 0, 0, 0 , 0, ; 0, 1, 0, 0 , 0, ; 0, 0, 1, 0 , 0, ; 0, 0, 0, lnTranspRatio, 0, ; 0, 0, 0, 0 , 0) * Creo un objeto de atributos de imagen para crear los efectos basados en nuestra martiz de color LOCAL loAttr AS xfcImageAttributes loAttr = .Imaging.ImageAttributes.New() loAttr.SetColorMatrix(loClrMatrix) * Nececitamos crear un rectangulo que contendrá las coordenadas y el tamaño del logo transformado LOCAL loRect as xfcRectangle loRect = .Rectangle.New() loRect.X = 0 loRect.Y = 0 loRect.Width = loLogoBmp.Width loRect.Height = loLogoBmp.Height * Dibujo la imagen transformada usando el rectángulo y el objeto de atributos de la imagen loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr) loMainBmp.Save("c:\logo4.jpg", .Imaging.ImageFormat.Jpeg) RUN /N explorer.exe c:\logo4.jpg ENDWITH
Me dà error aqui:
ResponderBorrar_SCREEN.AddProperty("System", NEWOBJECT("xfcSystem", LOCFILE("system.vcx")))
como solucionarlo
Reemplazalo por: DO (LOCFILE("System.prg"))
ResponderBorrarno existe el archivo system.vcx y no se soluciona reemplazando por DO (LOCFILE("System.prg"))
ResponderBorrar