[C con Clase] Recortar una Imagen con WinApi

Ringo aydabella en yahoo.com.ar
Mar Dic 5 14:39:58 CET 2006


Hola Steven,
  gracias por la respuesta y disculpas si es que algunas cosas no las entiendo desde un principio; el problema es que soy principiante en WinApi.
  La historia de siempre es que en la teoría se entiende todo, pero la práctica muestra otra cosa. Aqui les envío el código que hasta ahora escribí y algo que todavía no entiendo es que en mi Funcion CTrozo(....) el siguiente código me muestra todas mis Regiones:
  
for(i=0;i<=3;i++)
    {
    FrameRgn(hDC, hRegion[i], pincel, 1, 1);
    }
   
  pero si lo escribo de la siguiente forma:
  for(i=0;i<=3;i++)
    {
    GetClipRgn(hDC,hRegion[i]);
    SelectClipRgn(hDC,hRegion[i]);
    FrameRgn(hDC, hRegion[i], pincel, 1, 1);
    BitBlt(hDC, 0, 0, 320, 320, memDC, 0,0, SRCCOPY);
    }
  solo me muestra una Región.
  Gracias por toda resspuesta.
  Abel.
Steven Davidson <steven en conclase.net> escribió:
  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
_______________________________________________
Cconclase mailing list
Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net


 __________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20061205/4c17cb79/attachment.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: SetRect.cpp
Type: application/octet-stream
Size: 6031 bytes
Desc: 2470845038-SetRect.cpp
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20061205/4c17cb79/attachment.obj>


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