Hola invitado         31 Jul, 2010 - 07:38
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
Recortar imágenes con GDI+ (Cesar Chalom) Traducción lecturas 3290
 Enviado por amby en Lunes, 11 Septiembre, 2006
Rutinas Una vez más Cesar Chalom nos regala un código para el tratamiento de imágenes. En este caso se trata de recortar la imagen en tres partes, esquina superior izquierda, el centro y la esquina inferior izquierda.

Recortar imágenes con GDI+

Artículo original: CROP IMAGES WITH GDI+
http://weblogs.foxite.com/cesarchalom/archive/2006/05/25/1581.aspx
Autor: Cesar Chalom (http://weblogs.foxite.com/cesarchalom)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)


Este post va dirigido a Malcolm Greene ... :)

Recortar imágenes es una tarea sencilla para GDI+.

Una de las formas que se puede hacer es utilizando la función GdipCloneBitmapAreaI, que desafortunadamente no se incluyó en _gdiplus.vcx; pero que se puede acceder fácilmente.

Imagen original

Superior izquierda

Centro

Inferior derecha

Ejecute el código siguiente, seleccione cualquier imagen, y podrá ver la imagen recortada en tres vías: la parte superior izquierda de la imagen, la parte inferior derecha y el centro.

LOCAL lcSource
lcSource = GETPICT()
IF EMPTY(lcSource)
  RETURN
ENDIF
* Cargar la imagen a Gdiplus
LOCAL loImage AS GpImage OF HOME() + ffc/_gdiplus.vcx
loImage = NEWOBJECT("GpImage",HOME()+"ffc/_gdiplus.vcx")
loImage.CreateFromFile(lcSource)
lnWidth = loImage.ImageWidth
lnHeight = loImage.ImageHeight
* Recortar  imagen
LOCAL loCropped AS GpBitmap OF HOME() + ffc/_gdiplus.vcx
* Recortar parte superior izquierda
loCropped = Crop(loImage, 0, 0, lnWidth / 2, lnHeight /2)
loCropped.SavetoFile("Crop-TopLeft.png","image/png")
RUN /N explorer.EXE Crop-TopLeft.png
* Recortar parte inferior izquierda
loCropped = Crop(loImage, lnWidth / 2, lnHeight /2, lnWidth /2, lnHeight /2)
loCropped.SavetoFile("Crop-BottomRight.png","image/png")
RUN /N explorer.EXE Crop-bottomright.png
* Parte central
loCropped = Crop(loImage, lnWidth / 4, lnHeight /4, lnWidth /2, lnHeight /2)
loCropped.SavetoFile("Crop-Center.png","image/png")
RUN /N explorer.EXE Crop-CENTER.png
RETURN

PROCEDURE Crop(toImage, x, Y, tnWidth, tnHeight, tnPixelFormat)
  IF VARTYPE(tnPixelFormat) = "L"
    tnPixelFormat = toImage.PixelFormat
  ENDIF
  * GpStatus WINGDIPAPI GdipCloneBitmapAreaI
  * (INT x, INT y, INT width, INT height, PixelFormat format,
  * GpBitmap *srcBitmap, GpBitmap **dstBitmap)
  DECLARE LONG GdipCloneBitmapAreaI IN GDIPLUS.dll ;
    LONG x, LONG Y, LONG nWidth, LONG nHeight, ;
    LONG PixelFormat, LONG srcBitmap, LONG @dstBitmap
  LOCAL lnNewBitmap
  lnNewBitmap = 0
  = GdipCloneBitmapAreaI(x, Y, tnWidth, tnHeight, ;
    tnPixelFormat, toImage.GetHandle(), @lnNewBitmap)
  LOCAL loNewImage
  loNewImage = NEWOBJECT("GpBitmap",HOME()+"ffc/_gdiplus.vcx")
  loNewImage.SetHandle(lnNewBitmap)
  RETURN loNewImage
ENDPROC

Para lograr esto, he creado un pequeño procedimiento, "crop" (recortar), que recibe los siguientes parámetros desde MSDN:

toImage - objeto Image o Bitmap

X - Valor entero que especifica la coordenada x para la esquina superior izquierda del rectángulo que especifica la porción del bitmap a copiar.

Y - Valor entero que especifica la coordenada y para la esquina superior izquierda del rectángulo que especifica la porción del bitmap a copiar.

Width - Valor entero que especifica el ancho del rectángulo que especifica la porción del bitmap a copiar.

Height -  Valor entero que especifica la altura del rectángulo que especifica la porción del bitmap a copiar.

Format - opcional, valor entero que especifica el formato pixel del nuevo bitmap. El tipo de dato PixelFormat y las constantes que representan varios formatos pixels se definen en Gdiplus.h. Para más información sobre las constantes del formato pixel, vea Image Pixel Format Constants.

Valor que devuelve - Este método devuelve un puntero al nuevo objeto Bitmap que contiene la imagen recortada.


 Versión imprimible  
Recortar imágenes con GDI+ (Cesar Chalom) Traducción | Entrar/Crear una cuenta | 0 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.



Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2010 PortalFox. Todos los derechos reservados.