Bonjour a tous,
Je suis actuellement en train de développer une petite application pour prendre des screenshot de mes deux écrans avec Direct3D.
Pour cela, j'utilise la fonction GetFrontBufferData() qui me permet de correctement récuperer les screenshots de mes deux écrans sans problèmes et ensuite les enregistrer dans un fichier.
Tout cela fonctionne correctement lorsque l'écran est configuré en 32 bits (par pixel pour les couleurs). Des lors que je passe l'écran en 16 bits ( pour faire des tests), je récupère une image de mauvaise qualité, avec une mauvaise résolution et qui tend vers le violet (exemple ci dessous).
Il y a t'il une possibilité de correctement utilisé GetFrontbufferData() avec des écrans 8 bits ou 16 bits ?
Pour info le code utilisé actuellement:
Merci beaucoup pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 //init d3dPresentationParameters.Windowed = TRUE; d3dPresentationParameters.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; d3dPresentationParameters.BackBufferFormat = d3dDisplayMode.Format; d3dPresentationParameters.BackBufferHeight = d3dDisplayMode.Height; d3dPresentationParameters.BackBufferWidth = d3dDisplayMode.Width; d3dPresentationParameters.MultiSampleType = D3DMULTISAMPLE_NONE; d3dPresentationParameters.SwapEffect= D3DSWAPEFFECT_DISCARD; d3dPresentationParameters.hDeviceWindow = hWnd; d3dPresentationParameters.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; d3dPresentationParameters.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; // capture screen IDirect3DSurface9* pSurface; g_pd3dDevice->CreateOffscreenPlainSurface(width, height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pSurface, NULL); g_pd3dDevice->GetFrontBufferData(0, pSurface);
Dylan
Partager