Comment est-ce que je ferais pivoter un bitmap dans Windows GDI, C++?Comment faire pour faire pivoter Bitmap dans windows GDI?
Répondre
Vous pouvez le faire avec GDI + (#include <gdiplus.h>
). La classe Graphics a le RotateTransform method. Cela permet des rotations arbitraires. Utilisez Image::RotateFlip() si vous avez seulement besoin de tourner par incréments de 90 degrés, c'est beaucoup plus efficace.
Je pensais qu'il a demandé GDI? –
@ Frank Krueger - vous devez pouvoir lire sur ce site. Soit ça, soit jeter des pâtes au mur et voir ce qui colle. –
Mieux vaut s'en tenir à l'implémentation brute de GDI + car RotateFlip est tristement célèbre pour avoir jeté l'exception 'Générique GDI + erreur survenue' assez souvent. –
Il semble que vous deviez utiliser PlgBlt. Prenez les 4 coins de votre rectangle comme des points 2D, faites-les pivoter, puis appelez PlgBlt.
Pour copier un bitmap en un parallélogramme; utiliser la fonction PlgBlt , qui effectue un transfert de bit à partir d'un rectangle dans un contexte de périphérique source dans un parallélogramme dans un contexte de périphérique de destination. Pour faire pivoter le bitmap, une application doit fournir les coordonnées, dans le monde unités, à utiliser pour les coins de le parallélogramme.
Les documents PlgBlt mentionnent spécifiquement que les transformations de rotation ne sont pas supportées. C'est exact. Lien: http://msdn.microsoft.com/en-us/library/dd162804%28VS.85%29.aspx –
Une autre possibilité (au-delà de celles déjà suggérées) est d'utiliser SetWorldTransform()
. Ceci est différent en ce qu'il est modal et s'applique au DC dans son ensemble, pas seulement une seule opération. Si vous voulez faire pivoter un bitmap pivoté, mais d'autres choses sans rotation, ce n'est probablement pas votre meilleur choix. Si vous voulez faire pivoter un certain nombre de choses, ou (surtout) si vous voulez faire pivoter tout ce que vous dessinez (au moins dans un DC), cela peut fonctionner très bien.
J'ai essayé SetWorldTransform() et cela n'avait absolument aucun effet. La documentation indique que le mode graphique du contexte de périphérique doit être défini sur GM_ADVANCED. Je l'ai essayé, et il en est résulté un bitmap totalement noir. C'est ce qui se passe généralement lorsque vous essayez une fonctionnalité Microsoft; cela ne fonctionne pas, et vous passez l'autre 90% de votre temps à essayer de comprendre pourquoi. .NET est nettement meilleur, mais c'est tellement lent. – user20493
- 1. Comment faire pivoter Texte dans GDI +?
- 2. Comment faire pivoter des images monochromes dans GDI +
- 3. Comment faire pour convertir l'image de * GDI + en bitmap *
- 4. Comment faire pour convertir MonthCalendar en Bitmap dans Windows Forms?
- 5. Faire pivoter une image dans la programmation Windows Mobile
- 6. Comment faire pour faire pivoter un TextBox dans Microsoft Report?
- 7. Faire pivoter le texte de 90 degrés avec GDI
- 8. Android: faire pivoter pour faire face
- 9. Comment faire pivoter une image dans WinForms
- 10. Faire pivoter une image bitmap en utilisant la matrice
- 11. Comment faire pour faire pivoter UIImageView en mode circulaire 3D?
- 12. Comment faire pivoter une vue pour toujours?
- 13. Comment faire pivoter deux UIView?
- 14. Glisser pour faire pivoter dans l'application iPhone
- 15. Meilleur moyen d'ouvrir, recadrer, faire pivoter et convertir un Windows bitmap (bmp)
- 16. Comment faire pivoter une div
- 17. comment faire pivoter l'objet pile?
- 18. Comment faire pivoter un UIImageView?
- 19. comment faire pivoter la vidéo dans VideoView
- 20. Faire pivoter l'image dans picturebox
- 21. Comment faire pivoter un GluCynlinder dans OpenGL?
- 22. comment faire pivoter clé dans mfc
- 23. comment faire pivoter le texte?
- 24. OpenCV: comment faire pivoter IplImage?
- 25. comment faire pivoter l'image dans wpf
- 26. Faire pivoter MapView dans Android
- 27. Utilisation de GDI + Bitmap
- 28. Faire pivoter les contrôles dans Java
- 29. Comment faire pour faire pivoter le formulaire dans une direction verticale dans C#
- 30. Comment faire défiler légitimement avec GDI +?
Quel type de rotation? Incréments de 90 degrés, incréments arbitraires? –