Programación Específica > Programación de Videojuegos
Mamdar Un Pixel En Pantalla
LeGatoRojo:
Saben ya se usar como se usan los colores en 15 bits, pero quisiera saber como hago que la computadora mande un pixel en pantalla desde c++, saben ya habia hecho mi libreria de 256, pero quiro que abarque mas.
Amilius:
De esa forma es muy lento (pixel por pixel). Lo mejor es enviar toda la imagen lista a la memoria de video que refresca la pantalla o por lo menos una buena parte de la imagen.
Lo siguiente es una vista a "vuelo de pájaro" de como hacerlo con el GDI pero ahí va:
Para realizar esto de forma rápida puedes valerte del DirectX (con el lock/unlock) o del GDI de windows mediante el BitBlt. (Es decir que lo no haces "personalmente", sino mediante una biblioteca de funciones que al final usará los drivers del fabricante de la tarjeta de video para asegurarte velocidad en la transferencia de memoria.)
El BitBlt permite copiar la imagen de un "HDC" a otro realizando conversión de profundidad de color, poniendo tu superficie de 15 bits en memoria a otra de 8,15,16,24 o 32 bits.
HDC : handle of device context, un puntero a una estructura que define un conjunto de objetos gráficos del GDI.
--- Código: Text --- BOOL BitBlt( HDC hdcDest, // handle of destination device context int nXDest, // x-coordinate of destination rectangle's upper-left corner int nYDest, // x-coordinate of destination rectangle's upper-left corner int nWidth, // width of destination rectangle int nHeight, // height of destination rectangle HDC hdcSrc, // handle of source device context int nXSrc, // x-coordinate of source rectangle's upper-left corner int nYSrc, // y-coordinate of source rectangle's upper-left corner DWORD dwRop // raster operation code );
En Delphi existe un objeto llamado TBitmap que encapsula el GDI de windows, haciendo las cosas más fáciles (recuperar, escribir archivos .BMP, acceso a la misma imagen para edición, etc). Así que en la versión de compilador C++ que estas usando existirá algún objeto que encapsule el GDI.
Utilizando los objetos que encapsulan el GDI podrás obtener el HDC del bitmap que quieres poner en pantalla utilizando el bitblt o también acceder al área de memoria de la imagen que es mucho mejor que sea un DIB "Device Independet Bitmap" para como su nombre dice evitar que el bitmap sea dependiente de la profundidad de color de la resolución actual de la pantalla.
LeGatoRojo:
--- Cita de: "Amilius" --- De esa forma es muy lento (pixel por pixel). Lo mejor es enviar toda la imagen lista a la memoria de video que refresca la pantalla o por lo menos una buena parte de la imagen.
Lo siguiente es una vista a "vuelo de pájaro" de como hacerlo con el GDI pero ahí va:
Para realizar esto de forma rápida puedes valerte del DirectX (con el lock/unlock) o del GDI de windows mediante el BitBlt. (Es decir que lo no haces "personalmente", sino mediante una biblioteca de funciones que al final usará los drivers del fabricante de la tarjeta de video para asegurarte velocidad en la transferencia de memoria.)
El BitBlt permite copiar la imagen de un "HDC" a otro realizando conversión de profundidad de color, poniendo tu superficie de 15 bits en memoria a otra de 8,15,16,24 o 32 bits.
HDC : handle of device context, un puntero a una estructura que define un conjunto de objetos gráficos del GDI.
--- Código: Text --- BOOL BitBlt( HDC hdcDest, // handle of destination device context int nXDest, // x-coordinate of destination rectangle's upper-left corner int nYDest, // x-coordinate of destination rectangle's upper-left corner int nWidth, // width of destination rectangle int nHeight, // height of destination rectangle HDC hdcSrc, // handle of source device context int nXSrc, // x-coordinate of source rectangle's upper-left corner int nYSrc, // y-coordinate of source rectangle's upper-left corner DWORD dwRop // raster operation code );
En Delphi existe un objeto llamado TBitmap que encapsula el GDI de windows, haciendo las cosas más fáciles (recuperar, escribir archivos .BMP, acceso a la misma imagen para edición, etc). Así que en la versión de compilador C++ que estas usando existirá algún objeto que encapsule el GDI.
Utilizando los objetos que encapsulan el GDI podrás obtener el HDC del bitmap que quieres poner en pantalla utilizando el bitblt o también acceder al área de memoria de la imagen que es mucho mejor que sea un DIB "Device Independet Bitmap" para como su nombre dice evitar que el bitmap sea dependiente de la profundidad de color de la resolución actual de la pantalla.
--- Fin de la cita ---
ja creo que no me explique del todo :P , sabes yo lo queria hacer desde turbo c++, y queria mandar un pixel, no una imagen.
JuanK:
Para poner un pixel en turboC , se usa la funcion putpixel.
Sino, entonces tienes varias opciones:
1 - usar la api de windows
2 - usar un libreria, como por ejemplo directX, allegro, SDL etc
3 - Usar directamente las funcionalidades del driver de la tarjeta
4 - Hacer un driver
LeGatoRojo:
--- Cita de: "JuanK" --- Para poner un pixel en turboC , se usa la funcion putpixel.
Sino, entonces tienes varias opciones:
1 - usar la api de windows
2 - usar un libreria, como por ejemplo directX, allegro, SDL etc
3 - Usar directamente las funcionalidades del driver de la tarjeta
4 - Hacer un driver
--- Fin de la cita ---
bien bien, gracias, ahora tengo una nueva pregunta, como hago por ejemplo mi propia funcion putpixel, mas bien como hago mi propio driver
Navegación
[#] Página Siguiente
Ir a la versión completa