Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: CoLSoN2 en 31 de Octubre de 2002, 04:29:37 PM

Título: Obteniendo color de los pixels de un BMP
Publicado por: CoLSoN2 en 31 de Octubre de 2002, 04:29:37 PM
                                Esto quiero hacerlo para hacerlos servir de heightmaps para terrenos. He estado mirando un método de IDirect3DTexture8 :



IDirect3DTexture8::LockRect

Locks a rectangle on a texture resource.



HRESULT LockRect(

 UINT Level,

 D3DLOCKED_RECT* pLockedRect,

 CONST RECT* pRect,

 DWORD Flags

);


dice que si quieres lockear toda la textura, pRect tiene que ser NULL, y


D3DLOCKED_RECT  es:

typedef struct _D3DLOCKED_RECT {

   INT                 Pitch;

   void*               pBits;

} D3DLOCKED_RECT;



Members

Pitch

Pitch of surface, in bytes.

pBits

Pointer to the locked bits. If a RECT was provided to the LockRect call, pBits will be appropriately offset from the start of the surface.


mis preguntas:
1º - no entiendo que es PITCH , en D3DLOCKED_RECT ...
2º - pBits seria los datos del bitmap, osea los pixels, pero no se como obtener esos valores, ¿a q tendria que castearlo?

thx                                
Título: Obteniendo color de los pixels de un BMP
Publicado por: metaxas en 31 de Octubre de 2002, 06:47:12 PM
                                El pitch es el desplazamiento, en bytes, hasta el comienzo de la siguiente 'fila' de la textura almacenada en memoria. El cast dependerá del formato del pixel. Si por ejemplo es de 16 bits, lo leerías así:


D3DLOCKED_RECT lockedRect;



LockRect(0, &lockedRect, 0, 0);



unsigned short pixelColor;

unsigned short *buffer = (unsigned short *) lockedRect.pBits;



for (unsigned int i = 0; i < textureHeight; ++i)

{

   buffer += i * (lockedRect.Pitch / 2); // Se divide entre 2 porque se suma de short en short (2 bytes)



   for (unsigned int j = 0; j < textureWidth; ++j)

   {

       pixelColor = *(buffer + j);

   }

}



Si tienes alguna duda ya me conectaré el lunes, que hasta entonces no podré visitar los foros.


Metaxas                                
Título: si
Publicado por: CoLSoN2 en 31 de Octubre de 2002, 08:48:28 PM
                                si fuesen pixels de 8 bits, seria BYTE en vez de unsigned short nop ? y no se tendria ke dividí por 2

p.d: thx =)                                
Título: Obteniendo color de los pixels de un BMP
Publicado por: metaxas en 04 de Noviembre de 2002, 11:34:06 AM
                                Sí, exactamente, si 'buffer' es un puntero a un BYTE entonces no habría que dividir el Pitch entre 2

Metaxas