[C con Clase] Recortar una Imagen con WinApi

Steven Davidson steven en conclase.net
Mar Dic 5 13:12:52 CET 2006


Hola Abel,

El pasado 2006-12-05 08:49:59, Abel escribió:

A> Hola Salvador,
A>   lamentablemente tengo que seguir molestandote con mis preguntas. Ahora la cosa se me ha complicado más y cada vez entiendo menos. Empezaré desde un principio, escribí el siguiente código:
A>       .............
A>       HDC memDC;
A>       memDC = CreateCompatibleDC(hDC);
A>     HRGN hRegion = CreateRectRgn(10,10,20,20);
A>     SelectObject(memDC, hBitmap);
A>     BitBlt(hDC, 0, 0, 320, 320, memDC, 0,0, SRCCOPY);
A>     DeleteDC(memDC);
A>      ...........
A>   mi pregunta: acaso no debería dibujarse el hBitmap solo en la región de hRegion?, porque cuando corro el programa me muestra toda la imagen, entonces para que nos sirve las regiones?, ó es que primero hayque selecionar esa región, pero cómo?

No dibuja el mapa de bits con acorde a 'hRegion', ya que no has hecho nada con tal región. Debes usar la función 'SetClipRegion()' pasando la región descrita en 'hRegion' antes de invocar a 'BitBlt()'. Esto ya lo mencionó Salvador la primera vez que te respondió. La función 'SetClipRegion()' sirve para establecer la región de recorte actual. El sistema gráfico aplicará la región de recorte a las operaciones del GDI posteriores; o sea, la imagen de 'BitBlt()' será recortada o ajustada. Sugiero consultar su descripción yendo a: http://winapi.conclase.net/curso/index.php?fun=SelectClipRgn

Si vas a usar una figura algo compleja e irregular, entonces sugerimos usar caminos. En lugar de invocar 'SetClipRegion()', usaríamos 'SetClipPath()'. El enlace a su descripción es: http://winapi.conclase.net/curso/index.php?fun=SelectClipPath


La idea que Salvador te está dando se basa en que manipules la imagen original como si fuese una base de datos. Es decir, obtén la información (imagen) que quieras, según el criterio (camino o región de recorte) que necesites.


Espero que esto te oriente.

Steven


Más información sobre la lista de distribución Cconclase