Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Uso De Perfiles Icm ¿como Se Hace?

Iniciado por fiero, 24 de Octubre de 2005, 01:52:04 PM

« anterior - próximo »

fiero

 Hay gente que me cuenta que al hacer pantalla completa con mi programa, le cambian los colores de la pantalla, uso DirectX, aunque con las funciones GDI tambien me pasa. Esto es porque tienen un perfil de colores personalizado. Para los no entendidos, es lo que se hace en el Panel de control -> Propiedades de pantalla->Configuración->Opciones avanzadas->Administración de color, y suele ser un fichero .ICM que guarda las preferencias del usuario (brillo, contraste, etc)

Al entrar en el modo a pantalla completa parece ser que se resetean los ajustes personalizados.

Hay unas funciones de Microsoft, "ICM 2.0 Functions" en las MSDN que sirven para manejar estas cosas. Lo que he probado es llamar a GetICMProfile antes de la pantalla completa para saber que fichero de configuración usa el sistema, eso funciona correctamente. Luego quiero usar SetICMProfile después de la pantalla completa para restablecer los valores, si es que el cambio de modo los ha reseteado, pero esa función no me hace nada.

Otra solución sería que el cambio a pantalla completa no me reseteara los perfiles de color, con algún flag de DirectX o algo, no se...

¿Alguien a manejado alguna vez estos perfiles ICM? ¿Alguien a notado como el fullscreen mode le resetea todo? ¿Alguien sabe como solucionar esto?

Muchas gracias

un saludo
www.videopanoramas.com Videopanoramas 3D player

Ray

 prueba a guardar y recuperar con GetGammaRamp  y SetGammaRamp, son metodos de IDirect3DDevice9.

saludos.

[EX3]

Cita de: "Ray"prueba a guardar y recuperar con GetGammaRamp  y SetGammaRamp, son metodos de IDirect3DDevice9.
Pero los metodos de Gamma de DirectX en teoria (y al menos en mi practica) no interfieren con los de Windows, para ello deberias tocar el tema del Gamma desde el GDI de Windows mediante GetDeviceGammaRamp() y SetDeviceGammaRamp().

Un apunte, recuerdo que el mod de Half-Life Natural Selection tenia este problema tambien. Despues de ejecutar el juego o cuando petaba y terminaba la ejecucion con mensaje de error de Windows, el GDI conservaba el gamma de la pantalla tal y como lo configuraba el juego para si mismo. El mod traia consigo una "safe-utility" que se tenia que ejecutar en caso de provocar dicho error para que devolvia los parametros de gamma anteriores a la ejecucion del juego.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

zupervaca

 
// Cambiar la gama de color
void Cdib3D::ChangeGamma( WORD wFactor/*= 256*/ )
{
// Modificar la gama de color dependiendo del factor indicado
D3DGAMMARAMP gamma;
for( WORD n = 0; n < 256; n++ )
{
 int iGammaCorrection = int(n * wFactor);
 if( iGammaCorrection > 65535 ) iGammaCorrection = 65535;
 WORD wGammaCorrection = (WORD)iGammaCorrection;
 gamma.red[n] = wGammaCorrection;
 gamma.green[n] = wGammaCorrection;
 gamma.blue[n] = wGammaCorrection;
}
// Indicar gamma de color
GetDevice()->SetGammaRamp( 0, D3DSGR_NO_CALIBRATION, &gamma );
}


esta rutina esta en el baul de los recuerdos, pero funciona correctamente

fiero

 uf, lo malo es que yo uso DX5, así que no están esas funciones de SetGammaRamp y GetGammaRamp. Y

Las funciones que dice EX3 GetDeviceGammaRamp y SetDeviceGammaRamp tampoco me funcionan. En la ayuda pone "Not all direct color video boards support loadable gamma ramps", así que supongo que mi portatil no lo soporta.

Creo que usaré GetDeviceGammaRamp y SetDeviceGammaRamp del GDI e intentaré contactar con alguien al que le falle, para ver si funciona. Mi problema es que a mi me funciona perfectamente, al conmutar a pantalla completa no me pierde la configuración, así que voy a ciegas.

Bueno, gracias por la ayuda :)
www.videopanoramas.com Videopanoramas 3D player

Ray

 ¿Y por qué no lo pasas a la 6?, creo que no hay mucha diferencia con la 5 y te podría resolver de un plumazo el problema.

Al menos tiene un IDirectDrawGammaControl y no me extrañaría que sea un parche para resolver tu (el de todos) problema cuando vieron que se cepillaba los perfiles esos.

[EX3]

Cita de: "fiero"uf, lo malo es que yo uso DX5, así que no están esas funciones de SetGammaRamp y GetGammaRamp.
Como programador de VB6.0 no me hagas mucho caso ya que no he programado por debajo de DirectX7 por temas de soporte, pero que yo recuerde de Dx8 a atras muchas funciones de graficos se compartian entre DDraw y D3D, y DDraw si tiene funciones para manejar el Gamma. Supongo que DDraw5 si las trae (no lo se seguro) asi que tendrias que tirar de ellas.

Sobre las del GDI, no se, yo y la gente que las hemos probado si nos funcionan correctamente.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

fiero

 Me parece que DX5 no tienen nada de gamma, o por lo menos no veo nada en la ayuda. La cuestión es que ni siquiera debería usar DX para arreglarlo, ya que al cambiar a pantalla completa con la GDI tambien sucede lo mismo (a los que les pasa).

La razón de que use DX5 es que venía de serie con w98, y esa es la configuración mínima que exijo para mi programa. Como es un plugin del navegador, debe ser lo menos restrictiva posible. Incluso funciona sin DX, en windows NT4, utilizando solo funciones de la GDI.

Bueno, ya os diré como va la cosa.
www.videopanoramas.com Videopanoramas 3D player






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.