Bonjour,

Je vous propose un nouvel élément à utiliser : Imager - afficheur d'images, y compris *. WEBP

Imager, un afficheur d'images, même les *.WEBP

Le programme Imager permet de visualiser toutes les images disponibles sur l'ordinateur. Il est codé en cpp avec une architecture MFC pour fonctionner sous Windows 10 et être compilée avec Visual Studio Community 2019.

L’architecture du programme est un très classique document-vue avec la classe CImagerApp, dérivée de CWinApp pour l’application, contenue dans les fichiers Imager.h et Imager.cpp et la classe CMainFrame dérivée de CFrameWnd contenue dans les fichiers MainFrm.h et MainFrm.cpp. C’est facile de retrouver les autres éléments dans les différents fichiers source, car d’une manière générale, les noms ont un rapport avec les classes contenues. Une exception est faite pour les classes de l'architecture *doc et *view où ce terme est déplacé au début du nom pour les grouper ensemble et éviter de les éparpiller dans toute la liste classée par ordre alphabétique.

La structure multi-vues utilise 13 groupes de classes pour gérer les différents types de fichiers images affichés. Ces groupes sont gérés par la classe CMultiDocTemplate avec les arguments suivants :

  • UINT nIDResource, spécifie l'ID de la ressource utilisée avec ce type de document,
  • CRuntimeClass* pDocClass, pointe l'objet d'une classe CDocument indiquant les opérations liées à ce type de document,
  • CRuntimeClass* pFrameClass, pointe l'objet d'une classe CFrameClass indiquant les opérations support de la fenêtre propre à ce type de documents,
  • CRuntimeClass* pViewClass pointe l'objet d'une classe CViewClass indiquant les fonctions nécessaires à l'affichage de ce type de document.


Détails des 13 groupes :

Type fichier IDResource DocClass FrameClass ViewClass
*.bmp IDR_IMAGER_BMP CImagerDoc CChildFrame CImageView
*.gif IDR_IMAGER_GIF CImagerDoc CCHildFrame CGIFFView
*.jpg IDR_IMAGER_JPG CImagerDoc CChildFrame CImagerView
*.png IDR_IMAGER_PNG CImagerDoc CChildFrame CImagerView
*.tif IDR_IMAGER_TIF CImagerDoc CChildFrame CTIFFView
*.webp IDR_IMAGER_WEB CImagerDoc CChildFrame CImagerView
*.cur IDR_IMAGER_CUR CIconCurDoc CChildFrame CIconCurView
*.ico IDR_IMAGER_ICO CIconCurDoc CChildFrame CIconCurView
*.wmf IDR_IMAGER_WMF CImagerDoc CChildFrame CImagerView
*.emf IDR_IMAGER_EMF CImagerDoc CChildFrame CImagerView
*.exe IDR_IMAGER_EXE CResourceDoc CChildFrame CResourceView
*.dll IDR_IMAGER_DLL CResourceDoc CChildFrame CResourceView
Icônes Windows IDR_IMAGER_WIC CIconCurDoc CChildFrame CWinIconView

À remarquer que les trois dernières structures n'affichent pas directement les images mais présentent une liste d'affichettes permettant la sélection de l'image présentée par l'une des autres structures adaptées.

Cette disposition permet de localiser et identifier facilement les programmes gérant les différentes fonctions. Elles utilisent largement Gdiplus pour la lecture, l'écriture et l'affichage. Les fichiers BitmapUtil.h, BitmapUtil.cpp, IconCurs.h, IconCurs.cpp, ResourceUtil.h et ResourceUtil.cpp fournissent aussi les procédures nécessaires pour gérer les bitmaps, traiter les icônes et les curseurs et accéder aux ressources des fichiers de programme. Ils complètent les lacunes de Gdiplus qui n'est pas capable d'écrire certains fichiers.

Une complexité est ajoutée dans le traitement des icônes Windows pour les extraire au format 24 bits par pixel au lieu du 32 bits d'origine, ce dernier format non standard n'étant pas trop 'apprécié' par certains utilitaires y compris Visual Studio. Bien sûr, la dimension du pixel pourrait être encore plus réduite pour certaines icônes, mais était-ce nécessaire comme la taille mémoire n'est plus un problème ! Avec l'avantage pour ces deux formats sans palette de couleurs de privilégier la vitesse d'exécution.

Ce programme Traite aussi le nouveau format *.WEBP grâce au codec que Google met à disposition. Renseignement à http://groups.google.com/a/webmproje...p/webp-discuss.

Les Classes CHelpDlg et CTreeView assurent l’affichage d’un mode d’emploi avec l’aide des fichiers *.htm contenus dans le dossier Help ; le fichier HMenu.h contient le noyau initial du menu de l'aide. Cette partie peut facilement être transportée dans une autre application elle mets en œuvre ces 3 fichiers HelpDlg.h, HelpDlg.cpp et HMenu.h ; ce dernier assurant la liaison avec l’application. Pour l'exemple, la mise en ouvre de cette fonction est complètement contenue dans la Classe d’application CImagerApp.

Qu'en pensez-vous ?