Bonjour,


Je possède un videoprojecteur 16/9 et je souhaite réaliser un système de store qui permettrait de cacher les bandes noires des films, sur le dessus et le dessous de l'image. Le principe serait de commander des petits stores déroulants de couleur noirs qui viendrait se placer juste à la bordure de l'image.

En effet, le fait d'avoir une image bien délimitée avec des bordures noires, renforce le contraste de celle-ci (illusion d'optique), surtout dans le domaine de la videoprojection ou les contrastes sont bien moindres qu'avec du cathodique par exemple...

Là ou ça se complique, c'est qu'il existe une multitude de formats 16/9 différents, et qu'il faut donc trouver un moyen de commander les stores suivants le type de format detecté (1.77, 1.85, 2.35, etc)

Je possède un PC home cinéma qui fait office de lecteur DVD, et donc ce que je pense faire c'est récupérer le backbuffer, l'analyser en detectant les bandes noires en haut et en bas de l'image, de là en déduire le format du film ; puis envoyer un signal aux moteurs pas à pas qui commmanderont les stores, ceux ci se positionnant alors pil au bon endroit, cachant ainsi les bandes noires de l'image 16/9.

J'ai donc un peu fouiner sur le net et j'ai trouvé ce code, qui permet à priori de faire ce que je souhaite, mais je ne voudrai pas sauvegarder l'image sous forme d'une bmp, mais directement travailler dessus en mémoire ; ne maitrisant pas du tout directX, je vous demande donc de l'aide

Autre chose, j'aurai besoin d'accéder aux Metadatas, pour récupérer la largeur et la hauteur de l'image ; ces données sont-elles présentes dans le backbuffer ? (Comme c'est le cas dans une image BMP par exemple...)

Voici le code que j'ai trouvé sur ce forum, permettant de sauvegarder le backbuffer :


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
17
18
19
20
21
bool Screenshot(const std::string& pFilename) 
{ 
   // Surface de destination 
   LPDIRECT3DSURFACE9 Surface = NULL; 
 
   // Récupération du backbuffer 
   if (FAILED(m_Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &Surface))) 
        return false; 
 
   // Sauvegarde de la surface dans le fichier 
   if (FAILED(D3DXSaveSurfaceToFile(pFilename.c_str(), D3DXIFF_BMP, Surface, NULL, NULL))) 
   { 
        Surface->Release(); 
        return false; 
   } 
 
   // Destruction de la surface 
   Surface->Release(); 
 
   return true; 
}

Merci !!

PS : Pensez vous que ce que je compte faire prendra beaucoup de ressources, à raison d'une capture/analyse toutes les secondes environ ?