Une fonctionnalité que je voulais implémenter dans StopMo.Net était la possibilité d’effectuer des expositions multiples sur la même image afin de créer un effet de flou dans le but de rendre les mouvements plus réalistes.
Si en WPF il est très facile d’afficher à l’écran de multiples images superposées à l’aide de multiples éléments Images empilés dans une Grid, il n’est pas aussi trivial d’exporter le résultat obtenu sous forme d’un fichier sur disque.
Une option séduisante et simplissime de résoudre le problème avec WPF uniquement serait d’utiliser une VisualBrush ayant comme source un empilage d’objets Image, pour peindre ensuite une surface et la sauver dans un fichier. malheureusement, l’image ainsi produite serait alors déjà traitée par WPF, altérant l’image, modifiant sa taille et sa résolution, voire même de lisser l’image.
Le but étant ici de conserver une image ayant le moins de distorsion possible, cette option n’est pas envisageable. Deux options plus pures étaient alors possibles.
La première étant d’utiliser GDI+, la seconde d’utiliser Direct2D en conjonction avec l’API WIC de Microsoft, utilisée en arrière plan par WPF pour la gestion de rendu d’images.
Microsoft ayant sorti très récemment un wrapper (Windows7 API Code Pack) pour DirectX 10/11, Direct2D et le Windows 7 SDK. Ce wrapper inclut également (pour l’instant partiellement) WIC. Direct2D est la solution Microsoft pour la gestion d’affichage en deux dimensions visant à remplacer GDI+, et supportant l’accélération matérielle. J’ai donc choisi d’utiliser Direct2D, histoire également de découvrir cette nouvelle technologie.
Ce qu’il est important de savoir est que pour l’instant, le fameux CodePack n’implémente encore pas toutes les fonctionnalités de DirectX.
Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite, Windows Imaging Component (WIC) APIs. (DirectWrite and WIC have partial support)
Elles le seront cependant probablement dans le futur. Mes essais préliminaires m’ont donc mené à écrire quelques fonctionnalités manquantes notamment pour la création d’objets WICBitmap.
Un grand merci d’ailleurs à Florian pour son aide et sa patience lors des longues discussions que nous avons eu sur le sujet, et pour son Hack consistant à récupérer par réflexion les objets WIC utilisés en arrière plan par les classes WPF. Ceci afin d’éviter de devoir réécrire de nombreuses fonctionnalités encore manquantes dans le CodePack.
Le résultat est qu’il m’est à présent possible de superposer avec un niveau de transparence arbitraire plusieurs images, créant ainsi une superposition qui visera à donner une impression de mouvement sur une animation Stop Motion.
6a594f13-0021-42c1-a46f-f9e736c03a9b|0|.0