Artículo original: Draw Logos in your images with GdiPlusX - Part 2
http://weblogs.foxite.com/vfpimaging/archive/2007/07/27/4338.aspx
Autor: Cesar Ch.
Traducido por: Luis Maria Guayán
Aquí están 5 nuevos ejemplos derivados de otros que mostré en un artículo anterior. (Nota del traductor: la traducción de este artículo está en este Blog)
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 5:
Aplico 100% de transparencia al color blanco para eliminar el fondo. Dibujo el logo aplicando la matriz de color definida con la siguiente transformación: convierto a escala de grises con 50% de transparencia a toda la imagen.
Posición: Borde superior izquierdo.

_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)
*!* Sample 5
*!* Aply 100% transparency to the white color, to eliminate the background
*!* Draw the logo aplying predefined ColorMatrix that will
*!* the following transformation: convert to greyscale 50% transparency to the whole image
*!* Position: Top Left
* First step: eliminate the white background
loLogoBmp.MakeTransparent(.Color.White)
* Define the transparency ratio that will be aplied
* This parameter ranges from 0 (totally transparent) to 1 (totally opaque)
LOCAL lnTranspRatio
lnTranspRatio = 0.50 && 50%
* Create a ColorMatrix that will have the transformations information
* The position (4,4) of the matrix is responsible for the opacity
LOCAL loClrMatrix AS xfcColorMatrix
loClrMatrix = .Imaging.ColorMatrix.New( ;
0.33, 0.33, 0.33, 0 , 0, ;
0.33, 0.33, 0.33, 0 , 0, ;
0.33, 0.33, 0.33, 0 , 0, ;
0, 0, 0, lnTranspRatio, 0, ;
0, 0, 0, 0 , 0)
* Create an Image Attributes object to create the effects based in our ClrMatrix
LOCAL loAttr AS xfcImageAttributes
loAttr = .Imaging.ImageAttributes.New()
loAttr.SetColorMatrix(loClrMatrix)
* We need to create a rectangle that will contain the coordinates and size of the transformed logo
LOCAL loRect as xfcRectangle
loRect = .Rectangle.New()
loRect.X = 0
loRect.Y = 0
loRect.Width = loLogoBmp.Width
loRect.Height = loLogoBmp.Height
* Draw the transformed image using the rectangle and ImgAttributes/ClrMatrix
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loMainBmp.Save("c:\logo5.jpg", .Imaging.ImageFormat.Jpeg)
RUN /N explorer.exe c:\logo5.jpg
ENDWITH
RETURN
Ejemplo 6:
Aplico 100% de transparencia al color blanco para eliminar el fondo. Dibujo el logo aplicando la matriz de color definida con la siguiente transformación: convierto a escala de grises con 50% de transparencia a toda la imagen.
Posición: Centro.
Tamaño: Agrandada 4 veces

_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)
*!* Sample 6
*!* Aply 100% transparency to the white color, to eliminate the background
*!* Draw the logo aplying predefined ColorMatrix that will
*!* the following transformation: convert to greyscale 50% transparency to the whole image
*!* Position: Center
*!* Size: Expanded 4 times
* First step: eliminate the white background
loLogoBmp.MakeTransparent(.Color.White)
* Define the transparency ratio that will be aplied
* This parameter ranges from 0 (totally transparent) to 1 (totally opaque)
LOCAL lnTranspRatio
lnTranspRatio = 0.25 && 25%
* Create a ColorMatrix that will have the transformations information
* The position (4,4) of the matrix is responsible for the opacity
LOCAL loClrMatrix AS xfcColorMatrix
loClrMatrix = .Imaging.ColorMatrix.New( ;
0.33, 0.33, 0.33, 0 , 0, ;
0.33, 0.33, 0.33, 0 , 0, ;
0.33, 0.33, 0.33, 0 , 0, ;
0, 0, 0, lnTranspRatio, 0, ;
0, 0, 0, 0 , 0)
* Create an Image Attributes object to create the effects based in our ClrMatrix
LOCAL loAttr AS xfcImageAttributes
loAttr = .Imaging.ImageAttributes.New()
loAttr.SetColorMatrix(loClrMatrix)
* We need to create a rectangle that will contain the coordinates and size of the transformed logo
LOCAL loRect as xfcRectangle
loRect = .Rectangle.New()
loRect.X = (loMainBmp.Width - loLogoBmp.Width*4) / 2
loRect.Y = (loMainBmp.Height - loLogoBmp.Height*4) / 2
loRect.Width = loLogoBmp.Width * 4
loRect.Height = loLogoBmp.Height * 4
* Draw the transformed image using the rectangle and ImgAttributes/ClrMatrix
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loMainBmp.Save("c:\logo6.jpg", .Imaging.ImageFormat.Jpeg)
RUN /N explorer.exe c:\logo6.jpg
ENDWITH
RETURN
Ejemplo 7:
Aplico 100% de transparencia al color blanco para eliminar el fondo. Dibujo el logo aplicando 25% de opacidad a toda la imagen.
Posición: Centro.
Tamaño: Agrandada 4 veces

_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)
*!* Sample 7
*!* Aply 100% transparency to the white color, to eliminate the background
*!* Draw the logo aplying 25% OPACITY to the whole image
*!* Position: CENTER
*!* Size: Expanded 4 times
* First step: eliminate the white background
loLogoBmp.MakeTransparent(.Color.White)
* Define the transparency ratio that will be aplied
* This parameter ranges from 0 (totally transparent) to 1 (totally opaque)
LOCAL lnTranspRatio
lnTranspRatio = 0.25 && 25%
* Create a ColorMatrix that will have the transformations information
* The position (4,4) of the matrix is responsible for the opacity
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)
* Create an Image Attributes object to create the effects based in our ClrMatrix
LOCAL loAttr AS xfcImageAttributes
loAttr = .Imaging.ImageAttributes.New()
loAttr.SetColorMatrix(loClrMatrix)
* We need to create a rectangle that will contain the coordinates and size of the transformed logo
LOCAL loRect as xfcRectangle
loRect = .Rectangle.New()
loRect.X = (loMainBmp.Width - loLogoBmp.Width*4) / 2
loRect.Y = (loMainBmp.Height - loLogoBmp.Height*4) / 2
loRect.Width = loLogoBmp.Width * 4
loRect.Height = loLogoBmp.Height * 4
* Draw the transformed image using the rectangle and ImgAttributes/ClrMatrix
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loMainBmp.Save("c:\logo7.jpg", .Imaging.ImageFormat.Jpeg)
RUN /N explorer.exe c:\logo7.jpg
ENDWITH
RETURN
Ejemplo 8:
Usando la tecnica mostrada anteriormente, dibujo logos y textos aplicando transparencias variables.
El siguiente código no está optimizado, y solo intenta mostrar algunas posibilidades.

_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)
*!* Sample 8
*!* Draw image and text in different transparencies
LOCAL lcString
LOCAL loFont as xfcFont
loFont = .Font.New("Verdana", 22, .FontStyle.BoldItalic)
LOCAL loColor as xfcColor
loColor = .Color.White
LOCAL lnXString
lnXString = 0 + loLogoBmp.Width
* First step: eliminate the white background
loLogoBmp.MakeTransparent(.Color.White)
* Define the transparency ratio that will be aplied
* This parameter ranges from 0 (totally transparent) to 1 (totally opaque)
LOCAL lnTranspRatio
* Create a ColorMatrix that will have the transformations information
* The position (4,4) of the matrix is responsible for the opacity
LOCAL loClrMatrix AS xfcColorMatrix
loClrMatrix = .Imaging.ColorMatrix.New()
* Create an Image Attributes object to create the effects based in our ClrMatrix
LOCAL loAttr AS xfcImageAttributes
loAttr = .Imaging.ImageAttributes.New()
* We need to create a rectangle that will contain the coordinates and size of the transformed logo
LOCAL loRect as xfcRectangle
loRect = .Rectangle.New()
loRect.Width = loLogoBmp.Width
loRect.Height = loLogoBmp.Height
LOCAL loBrush as xfcSolidBrush
loBrush = .SolidBrush.New(loColor)
* Step 1
* Draw image and text 100% opaque
lnOpaqueRatio = 1 && 100%
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 1) - loLogoBmp.Height
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered - 100% opaque", loFont, loBrush, lnXString, loRect.Y)
* Step 2
* Draw image and text 80% opaque
lnOpaqueRatio = .80
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 2) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered - 80% opaque", loFont, loBrush, lnXString, loRect.Y)
* Step 3
* Draw image and text 60% opaque
lnOpaqueRatio = .60
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 3) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered - 60% opaque", loFont, loBrush, lnXString, loRect.Y)
* Step 4
* Draw image and text 40% opaque
lnOpaqueRatio = .40
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 4) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered - 40% opaque", loFont, loBrush, lnXString, loRect.Y)
* Step 4
* Draw image and text 20% opaque
lnOpaqueRatio = .20
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 5) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered - 20% opaque", loFont, loBrush, lnXString, loRect.Y)
loMainBmp.Save("c:\logo8.jpg", .Imaging.ImageFormat.Jpeg)
RUN /N explorer.exe c:\logo8.jpg
ENDWITH
RETURN
Ejemplo 9:
Como en los ejemplos anteriores, usando las técnicas ya vistas, dibujo logos y texto aplicando transparencias variables, usando un logo monocromático.
El siguiente código no está optimizado, y solo intenta mostrar algunas posibilidades.

_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)
*!* Sample 9
*!* Draw image and text in different transparencies
LOCAL lcString
LOCAL loFont as xfcFont
loFont = .Font.New("Verdana", 30, .FontStyle.BoldItalic)
LOCAL loColor as xfcColor
loColor = .Color.White
LOCAL loBrush as xfcSolidBrush
loBrush = .SolidBrush.New(loColor)
LOCAL lnXString
lnXString = 0 + 10 + loLogoBmp.Width
* First step: eliminate the white background
loLogoBmp.MakeTransparent(.Color.White)
* Define the transparency ratio that will be aplied
* This parameter ranges from 0 (totally transparent) to 1 (totally opaque)
LOCAL lnTranspRatio
* Create a ColorMatrix that will have the transformations information
* The position (4,4) of the matrix is responsible for the opacity
LOCAL loClrMatrix AS xfcColorMatrix
loClrMatrix = .Imaging.ColorMatrix.New( ;
0.33, 0.33, 0.33, 0 , 0, ;
0.33, 0.33, 0.33, 0 , 0, ;
0.33, 0.33, 0.33, 0 , 0, ;
0, 0, 0, 1 , 0, ;
0, 0, 0, 0 , 0)
* Create an Image Attributes object to create the effects based in our ClrMatrix
LOCAL loAttr AS xfcImageAttributes
loAttr = .Imaging.ImageAttributes.New()
* We need to create a rectangle that will contain the coordinates and size of the transformed logo
LOCAL loRect as xfcRectangle
loRect = .Rectangle.New()
loRect.Width = loLogoBmp.Width
loRect.Height = loLogoBmp.Height
* Step 1
* Draw image and text 100% opaque
lnOpaqueRatio = 1 && 100%
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 1) - loLogoBmp.Height
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered", loFont, loBrush, lnXString, loRect.Y)
* Step 2
* Draw image and text 80% opaque
lnOpaqueRatio = .80
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 2) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered", loFont, loBrush, lnXString, loRect.Y)
* Step 3
* Draw image and text 60% opaque
lnOpaqueRatio = .60
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 3) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered", loFont, loBrush, lnXString, loRect.Y)
* Step 4
* Draw image and text 40% opaque
lnOpaqueRatio = .40
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 4) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered", loFont, loBrush, lnXString, loRect.Y)
* Step 5
* Draw image and text 20% opaque
lnOpaqueRatio = .20
loClrMatrix.Matrix33 = lnOpaqueRatio
loAttr.SetColorMatrix(loClrMatrix)
loRect.X = 0
loRect.Y = ( loMainBmp.Height / 5 * 5) - loLogoBmp.Height
loColor.A = lnOpaqueRatio * 255
loBrush.Color = loColor
loGfx.DrawImage(loLogoBmp, loRect, loLogoBmp.GetBounds(), .GraphicsUnit.Pixel, loAttr)
loGfx.DrawString("GdiPlusX Powered", loFont, loBrush, lnXString, loRect.Y)
* Finished Drawing, Now save the image and show it !
loMainBmp.Save("c:\logo9.jpg", .Imaging.ImageFormat.Jpeg)
RUN /N explorer.exe c:\logo9.jpg
ENDWITH
RETURN
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.