Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Obteniendo color de los pixels de un BMP

Iniciado por CoLSoN2, 31 de Octubre de 2002, 04:29:37 PM

« anterior - próximo »

CoLSoN2

                                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                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

metaxas

                                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                                

CoLSoN2

                                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 =)                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

metaxas

                                Sí, exactamente, si 'buffer' es un puntero a un BYTE entonces no habría que dividir el Pitch entre 2

Metaxas                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.