2008-10-06 8 views
0

Je sais que c'est possible, et beaucoup plus rapide que d'utiliser GDI +. Cependant, je n'ai trouvé aucun bon exemple d'utilisation de DirectX pour redimensionner une image et l'enregistrer sur le disque. Je l'ai implémenté encore et encore dans GDI +, ce n'est pas difficile. Cependant GDI + n'utilise aucune accélération matérielle, et j'espérais obtenir de meilleures performances en tapant sur la carte graphique.Exemple de code pour redimensionner une image en utilisant DirectX

Répondre

1

Avez-vous vraiment besoin d'utiliser DirectX? GDI + fait bien le travail pour redimensionner les images. Dans DirectX, vous n'avez pas vraiment besoin de redimensionner les images, car vous afficherez probablement vos images sous forme de textures. Puisque les textures ne peuvent s'appliquer qu'à un objet 3D (triangles/polygones/mesh), la taille de l'objet 3d et le port de vue déterminent la taille réelle de l'image affichée. Si vous devez mettre à l'échelle votre texture dans l'objet 3D, jouez simplement la coordonnée de texture ou la matrice.

Pour manipuler la texture, vous pouvez utiliser le mélange alpha, le masquage et toutes sortes de techniques de manipulation de texture, si c'est ce que vous cherchez. Pour manipuler des pixels individuels comme GDI +, je pense toujours que GDI + est la façon de faire. DirectX n'a ​​jamais réparé la manipulation d'image.

+0

Non, je n'ai pas besoin d'utiliser DirectX, je suis simplement à la recherche d'une alternative réaliste qui pourrait être plus rapide que GDI +. –

+0

Si c'est le cas, il y a beaucoup de bibliothèques là-bas, comme imagemagick (http://imagemagick.org/), il y en a plus mais je ne m'en souviens pas pour le moment. – faulty

3

Vous pouvez charger l'image en tant que texture, la mapper en texture sur un quad et dessiner ce quad de n'importe quelle taille sur l'écran. Cela fera l'échelle. Ensuite, vous pouvez saisir les données de pixels à partir de l'écran, les stocker dans un fichier ou les traiter plus avant.

C'est facile. Les exemples de base de texturing DirectX fournis avec le SDK peuvent être ajustés pour faire cela. Cependant, est lent. Pas le rendu lui-même, mais le transfert de données de pixels de l'écran vers un tampon mémoire. A mon avis, il serait beaucoup plus simple et plus rapide d'écrire un petit code qui redimensionne une image en utilisant la mise à l'échelle bilinéaire d'un tampon à l'autre.

+0

Je pensais qu'il serait plus rapide d'utiliser DirectX en raison de son utilisation de l'accélération matérielle. Je ne suis pas intéressé à le rendre à l'écran, seulement le redimensionner et l'enregistrer sur le disque. –

+0

La mise à l'échelle elle-même serait en effet plus rapide, mais la préparation des données pour le chargement de la texture et la relecture des pixels de l'écran surpasseront tous les avantages de performance de l'utilisation du matériel. Il est logique d'utiliser DirectX si vous mettez à l'échelle la même image plusieurs fois. –

Questions connexes