http://weblogs.foxite.com/vfpimaging/2006/02/07/rotate-flip-images-with-vfp9-and-gdi-
Autor: Cesar Ch.
Traducido por: Ana María Bisbé York
Ejecute el código que aparece debajo para cambiar el corte y la escala de una imagen.
Muchas gracias a Anatolyi Mogylevets, de www.news2news.com.
Una gran parte de este código es suyo, aunque como está incompleta _gdiplus.vcx, nos obliga a llamar directamente al API http://www.news2news.com/vfp/?example=479.
Para entender mejor como trabaja con GDI+, mire también estos enlaces:
http://www.vbaccelerator.com/home/VB/Code/vbMedia/Using_GDI_Plus/ Scale__Rotate__Skew_and_Transform_Images/article.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes/matrixclass/matrixmethods/shear.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes/matrixclass/matrixmethods/shear.asp

* SCALE AND SHEAR WITH GDI+
* --------------------------
* Muchas gracias a Anatolyi Mogylevets, de www.news2news.com
* Gran parte de este código es suyo, aunque como _gdiplus.vcx
* está incompleta,nos obliga a llamar directamente a través de API
* http://www.news2news.com/vfp/?example=479
DECLARE INTEGER GdipCreateMatrix IN gdiplus INTEGER @matrix
DECLARE INTEGER GdipDeleteMatrix IN gdiplus INTEGER matrix
DECLARE INTEGER GdipShearMatrix IN gdiplus;
INTEGER matrix, SINGLE shearX, SINGLE shearY, INTEGER ord
DECLARE INTEGER GdipScaleMatrix IN gdiplus;
INTEGER matrix, SINGLE scaleX, SINGLE scaleY, INTEGER ord
DECLARE INTEGER GdipSetWorldTransform IN gdiplus;
INTEGER graphics, INTEGER matrix
lcSource = GETPICT("jpg;gif;bmp")
lcDestination = ADDBS(JUSTPATH(lcSource))+ "Sheared_" +;
JUSTSTEM(lcSource)+".jpg"
LOCAL loImage AS GpImage OF _gdiplus.vcx
loImage = NEWOBJECT("GpImage", HOME() + "FFC\_gdiplus.vcx")
loImage.CreateFromFile(lcSource)
LOCAL loBitmap AS GpBitmap OF _gdiplus.vcx
loBitmap = NEWOBJECT("GpBitmap", HOME() + "FFC\_gdiplus.vcx")
LOCAL loGraphics AS GpGraphics OF _gdiplus.vcx
loGraphics = NEWOBJECT('GpGraphics',HOME() + "FFC\_gdiplus.vcx")
*** Ahora vamos a crear una imagen nueva con
*** Create Method - Crea un objeto bitmap.
*** Sintaxis: ? THIS.Create(tnWidth, tnHeight[, tnPixelFormat])
*** tnPixelFormat, opcional, una de las constantes GDIPLUS_PIXELFORMAT_*,
*** predeterminadas para GDIPLUS_PIXELFORMAT_32bppARGB.
LOCAL lnWidth, lnHeight, lnPixelFormat
lnWidth = loImage.ImageWidth
lnHeight = loImage.ImageWidth
lnPixelFormat = loImage.PixelFormat
LOCAL matrix1, xScaleFactor, yScaleFactor, xShearfactor, yShearFactor
xScaleFactor = 1.30
yScaleFactor = 0.75
xShearFactor = 0.20
yShearFactor = 0.10
STORE 0 TO matrix1
lnNewWidth = lnWidth * xScaleFactor * (1 + xShearFactor)
lnNewHeight = lnHeight * yScaleFactor * (1 + yShearFactor)
loBitmap.Create(lnNewWidth, lnNewHeight, lnPixelFormat)
loGraphics.CreateFromImage(loBitmap)
* crea un objeto Matrix
* y aplica las transformaciones de la escala y corte
= GdipCreateMatrix(@matrix1)
= GdipScaleMatrix(matrix1, xScaleFactor, yScaleFactor, 0)
= GdipShearMatrix(matrix1, xShearFactor, yShearFactor, 0)
= GdipSetWorldTransform(loGraphics.GetHandle(), matrix1)
loGraphics.DrawImageAt(loImage, 0, 0)
loGraphics.ResetTransform()
= GdipDeleteMatrix(matrix1)
loBitmap.SaveToFile(lcDestination, "image/jpeg")
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.