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