• Viernes 15 de Noviembre de 2024, 04:47

Autor Tema:  Acceder A Los Pixels  (Leído 1521 veces)

KaSuGaK

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Acceder A Los Pixels
« en: Lunes 11 de Julio de 2005, 12:37 »
0
Hola, este es mi primer mensaje en este foro, ha sido muy grato encnotrar un foro en castellano que trate este tema pues hasta el momento todo lo que he encotnrado que valiese la pena estaba en inglés y ahunk me defiendo ando un poco pez.. :).

El problema que tengo es el siguiente, quiero gestionar un control de colisiones con un bitmap en 3 colores, y no encuentro por ningun sitio como preguntarle a la surface de que color es el pixel de tal posicion. Me imagino que debe existir una funcion de este tipo no?. Lo mas parecido que heecontrado es el getPixelFormat y el ColorControl pero por lo poco que he entendido en ingles no tiene nada que ver con lo que necesito.

Haber si alguien me puedo ayudar, y gracias de antemano.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Acceder A Los Pixels
« Respuesta #1 en: Domingo 24 de Julio de 2005, 18:25 »
0
Supongo que estás usando la parte de directDraw de directX:

1.- Si tu bitmap de colisión está en una superficie directDraw:

El problema es que para hacer cualquier cosa con alguna superficie primero pasa de memoria de video a RAM el pedazo que quieres modificar o leer y recién puedes acceder al pixel. Es muy lento y es mejor tener todo el tiempo esa superficie en RAM.

No existe una función específica para tener el color de un pixel, tienes que hacer un lock/unlock de la superficie para obtener un puntero a la zona que quieres trabajar.

2.- Si tu bitmap de colisión está alojado en un objeto como el Tbitmap de Delphi:

Como no tienes que dibujar el bitmap de colisión una buena forma es tenerlo en un objeto gráfico separado y acceder a sus pixeles con algún método como el scanLine del Tbitmap de Delphi, que te permite trabajar con toda una línea a la vez por velocidad.

3.- Si tu bitmap de colisión es un pedazo de memoria que reservaste:

Esta es la mejor alternativa, recuerda que no es necesario que la resolución de tu bitmap de colisión sea igual a la de tus gráficos.

4.- De todas formas es mejor para ahorrar memoria y tiempo de cpu que las colisiones las hagas mediante conjuntos de zonas rectangulares y circulares, o elipses (así también puedes definir zonas más débiles o fuertes). Es más muchísimo más rápido y no tienes que sacar tus superficies de memoria de video. Mucho mejor si creas una herramienta para que puedas definir tu mismo en base a tus gráficos las zonas de colisión y definir puntos débiles y fuertes.