2009-08-26 9 views
0

J'ai un objet bitmap .NET GDI + (ou si cela rend le problème plus facile un objet bitmap WPF) et ce que je veux faire est de décaler le tout par dx, dy (entier pixels) et je voudrais idéalement le faire en utilisant. NET mais les appels API sont ok. Il doit être efficace car il va être appelé 10 000 fois avec des bitmaps modérément grandes.Défilement automatique ou déplacement d'un bitmap dans .NET

J'ai implémenté une solution en utilisant DrawImage - mais c'est lent et il arrête l'application pendant quelques minutes pendant que le GC nettoie les objets temporaires qui ont été utilisés. J'ai également commencé à travailler sur une version en utilisant ScrollDC mais jusqu'à présent, je n'ai pas eu de chance de le faire fonctionner sur le DC de l'image bitmap (je peux le faire acheter créer une bitmap API avec un handle bitmap, puis créer un DC DC asnd appelant ScrollDC mais je dois le remettre dans l'objet bitmap).

Il doit y avoir une façon "inplace" de déplacer un bitmap. mikej

Répondre

0

Avez-vous trouvé la méthode Graphics.FromImage? Cela vous permettra de manipuler l'image directement. Je ne suis pas sûr de ce que vous utilisez avec DrawImage, mais Graphics.DrawImage devrait vous permettre de copier une zone du bitmap sur lui-même (et d'appliquer un changement dans le processus). Vous pouvez également utiliser Graphics.GetHdc, ScrollDC et Graphics.ReleaseHdc.

0

Voulez-vous simplement déplacer l'ensemble du graphique? DrawImage a x, y paramètres pour le faire. Je n'interprète probablement pas votre question correctement. En outre, GDI ne sera pas une période efficace lorsque vous travaillez avec 10 000 images. Si vous voulez des performances proches de la performance en temps réel, vous devrez soit retravailler votre algorithme, soit vous lancer dans une API 3D (comme DirectX ou OpenGL), voire les deux. Désolé, ma question n'était pas trop claire.

0

Tout ce que j'essaie de faire est de faire défiler une image bitmap, c'est-à-dire de faire une opération de décalage. Par exemple, une méthode telle que Scroll (B, 1,0) déplacerait la totalité du bitmap B d'un pixel vers la droite.

J'ai une solution raisonnable en utilisant à la fois DrawImage et l'appel API ScrollWindowEx qui est environ 10 fois plus rapide.

J'essaie toujours de trouver comment je pourrais faire quelque chose de plus rapide en utilisant WPF.

0

J'ai écrit ma solution au problème au Scrolling a bitmap mais je ne suis toujours pas sûr qu'il n'y a pas de meilleure façon et si cela pourrait être mieux fait en disant WPF?

Questions connexes