2009-07-14 5 views
2

J'ai une question, qui peut être un rêve, mais je voulais savoir si l'un de mes collègues Stack Overflow pourrait m'aider.Utilisation de la carte graphique au lieu de GDI + pour la manipulation d'images

Dans la société pour laquelle je travaille, nous faisons milliards de manipulations d'image chaque mois. Fondamentalement, nous prenons une image massive, la découpe en images de 256 pixels carrés, les quantifions en couleur et les enregistrons sous forme de png - et passons à l'image de mammouth suivante. Nous utilisons un certain nombre de techniques pour le faire le plus rapidement possible, et actuellement, il est très rapide, mais je pense qu'il y a une chance que nous pourrions le rendre stellaire en vitesse.

L'application elle-même est .Net 2.0, boucle sur les divers octets de la grande image, lit les octets pour chaque petite image et utilise GDI pour enregistrer l'image après avoir parcouru un algorithme de quantification. Nous avons des dizaines de machines qui exécutent cette application, et toutes ont des cartes vidéo Nvidia Geforce 8 (ou mieux).

Existe-t-il un moyen d'utiliser le GPU à la place de la CPU pour effectuer une ou toutes les tâches ci-dessus? Si oui, comment je fais ça? Malheureusement, je n'ai jamais codé quelque chose comme ça auparavant, donc si quelqu'un peut m'aider, j'en aurai peut-être besoin expliqué assez à fond (et lentement).

+0

Vous ne traitez pas les images satellites par hasard? – hannson

+0

Non en fait, mais le principal serait le même. – Ash

Répondre

1

Quelques technologies pour se pencher sur:

  1. Windows Imaging Components. Ce n'est pas exactement ce que vous recherchez, car je ne pense pas qu'il utilise le GPU (bien que je puisse être wong), mais il devrait être nettement plus rapide que GDI +.

  2. Direct2D. cela utilise le GPU pour de nombreuses opérations de dessin et s'intègre bien avec les composants Windows Imaging. mais à partir de votre description, il n'est pas clair si les opérations de dessin optimisées par le GPU correspondent exactement à ce dont vous avez besoin.

En plus de ceux-ci, vous pouvez essayer d'utiliser des pixel shaders pour la manipulation d'image. c'est un domaine que je n'ai pas approfondi, donc je le laisserai aux autres pour commenter.

En d'autres termes, les composants de création d'image Windows devraient réduire considérablement le goulot d'étranglement de charge/sauvegarde PNG. les opérations qu'il fournit aideront probablement à découper l'image de manière beaucoup plus optimale que GDI +. Direct2D et/ou un pixel shader devrait aider à la manipulation au niveau du pixel. le pixel shader ne devrait être nécessaire que s'il n'y a plus de moyen direct de faire l'opération de quantification de couleur dont vous avez besoin sur les images.

2

Définir massif? (En d'autres termes, massif est relatif.)

Il est possible, utiliser CUDA - GPU NVIDIA -

http://developer.download.nvidia.com/compute/cuda/sdk/website/projects/dxtc/doc/cuda_dxtc.pdf

+0

+1 pour connaître CUDA. –

+0

Il semble que CUDA soit plus une question de compression d'images que de découpage des images. Alors que la compression est cool (et en quelque sorte * une partie du problème) à la fin du processus, j'ai encore besoin de fichiers PNG sortis. En ce qui concerne la massivité, l'image que je coupe est 8192px X 1024px. – Ash

Questions connexes