Hola,
yo ahora utilizo el GetDisplayMode de DirectX para recoger los bpp de pantalla. Ahora quiero hacerlo sin utilizar DirectX y no encuentro la forma de saber cuando la pantalla está a 15 ó 16 bits, he usado esto:
if(EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&devmode))
{
bpp=devmode.dmBitsPerPel;
}
pero siempre da 16, aunque la tarjeta sólo acepte el modo de 15 bits.
Sabeis la forma de averiguar esto mediante las MFC o funciones de windows?
un saludo
Prueba con GetDeviceCaps y GetDesktopWindow
(NOTA: no lo he pobrado)
He probado:
HDC hDC=GetDC(m_hWnd);
bpp=GetDeviceCaps(hDC,BITSPIXEL);
y bpp es siempre 16, aunque la pantalla esté a 15 bits.
Tambien he visto una propiedad que tiene esta funcion, COLORRES:
bits=GetDeviceCaps(hDC,COLORRES);
resulta que devuelve una máscara con los bits que se utilizan para definir el color. He probado con 24,32 bits y da 0xFFFFFF, con 16 bits da 0xFFFF, pero no lo he podido probar con 15 bits porque la tarjeta que utilizo no soporta esta función. La solución seria si esta función devolviera 0x7FFF en el modo de 15 bits, pero como no la soporta estoy en las mismas.
El caso es que alguna forma tiene que haber... :triste:
un saludo
No existe el modo de pantalla de 15 bits. Lo que utiliza es un fondo de 16 bits con una máscara de color para que no afecte al último bit. Lo que tienes que analizar es el nº de bits por color para conocer lo que tu necesitas.
Muy facil,
bloquea la superficie de video, y mira la mascara del verde en la informacion del pixelformat.
Recuerda que 15=555 y 16=565.
Ale.
Lo del 565 hoy en día es siempre así?
Recuerdo que en ms-dos con las vesa había que dar soporte a todos los formatos de color de 16 bits posibles, podía darse 655 por poner un ejemplo.
La matrox millenium tenía en Vesa2 un modo de 16 bits no-565.
Pues yo solo me he encontrado con formatos 565 y 555 para backbuffer para texturas puede encontrarte tambien el 1555 y el 4444.
Ale.
Hoy en dia siempre es 565, ya que el color que más peso tiene (por su luminosidad) es el verde, por eso se le asignan el doble de variaciones que a los otros dos. Esto se explica muy bien en cualquier tutorial de conversión RGB a YUV.
En cuanto a mi problema, he decidido eliminar todas las funciones DirectX de mi programa, por eso no puedo utilizar el PIXELFORMAT. Le estoy dando vueltas a las MFC, a la clase CDC, a las funciones del API de windows.... pero no encuentro la manera de chequear que la tarjeta se encuentra en el modo 555... :triste:
un saludo
PD: Bueno, una matización, las tarjetas puede que tengan modos raros, pero los sistemas operativos y apis ya no los soportan por la evidente pérdida de calidad sin sentido. Por ejemplo, para qué usar 655 ó 556 si con 565 se obtiene una gama de colores mucho más rica, por eso no se usan aunque existan.
[ Este Mensaje fue editado por: fiero el 2002-05-14 15:27 ]