Wie würde ich eine Bitmap in Windows GDI, C++ drehen?Wie man Bitmap in Windows GDI dreht?
Antwort
Sie können es mit GDI + (#include <gdiplus.h>
) tun. Die Graphics-Klasse hat die RotateTransform method. Das erlaubt beliebige Rotationen. Verwenden Sie Image::RotateFlip(), wenn Sie nur um 90-Grad-Schritten drehen müssen, das ist viel effizienter.
Ich dachte, er fragte nach GDI? –
@Frank Krüger - Sie müssen in der Lage sein, auf dieser Website zu lesen. Entweder das, oder Nudeln an die Wand werfen und sehen, was klebt. –
Bessere Stick mit roher GDI + Implementierung als RotateFlip ist berüchtigt dafür, die 'Generic GDI + error occured' Ausnahme ziemlich oft zu werfen. –
Klingt wie Sie PlgBlt verwenden. Nimm die 4 Ecken deines Rechtecks als 2D Punkte, drehe sie und rufe dann PlgBlt auf.
Von MSDN Bitmap Rotation:
Um eine Bitmap in ein Parallelogramm zu kopieren; verwenden, um die PlgBlt Funktion, die sich von einem Rechteck in einer Quelle Gerätekontext in ein Parallelogramm in eine Zielgerätekontext einen Bit-Block Übertragung durchführt. Um das Bitmap zu drehen, muss eine Anwendung die Koordinaten bereitzustellen, in Welt Einheiten, für die Ecken von das Parallelogramm verwendet werden.
Die PlgBlt-Dokumentation erwähnt ausdrücklich, dass Rotationstransformationen nicht unterstützt werden. Das ist genau. Link: http://msdn.microsoft.com/en-us/library/dd162804%28VS.85%29.aspx –
Eine andere Möglichkeit (als die bereits schon vorgeschlagen) ist SetWorldTransform()
zu verwenden. Dies ist insofern anders, als es modal ist und für den DC als Ganzes gilt, nicht nur für eine einzelne Operation. Wenn Sie eine Bitmap rotieren möchten, aber andere Dinge ohne Rotation, ist es wahrscheinlich nicht Ihre beste Wahl. Wenn Sie eine Reihe von Dingen rotieren wollen, oder (besonders) wenn Sie alles, was Sie zeichnen, drehen möchten (zumindest in einen DC), kann es auch ganz gut funktionieren.
Ich habe versucht, SetWorldTransform() und es hatte absolut keine Wirkung. Die Dokumentation besagt, dass der Grafikmodus des Gerätekontexts auf GM_ADVANCED festgelegt werden muss. Ich habe es versucht, und es ergab sich eine völlig schwarze Bitmap. Dies passiert normalerweise, wenn Sie ein Microsoft-Feature ausprobieren. Es funktioniert nicht, und Sie verbringen die anderen 90% Ihrer Zeit damit, herauszufinden, warum. .NET ist merklich besser, aber es ist so langsam. – user20493
- 1. Wie man das Bitmap richtig dreht?
- 2. Wie man eine Bitmap in einem Polygon dreht?
- 3. Wie man Bitmap dreht, ohne ein neues zu erstellen?
- 4. wie einen native GDI-Bitmap aus einer .net Bitmap erhalten
- 5. Konvertieren von GDI + 's Bild * in Bitmap *
- 6. Erstellen einer transparenten Bitmap mit GDI?
- 7. WPF Bitmap Bindung mit GDI + Ausnahme
- 8. kann nicht zeichnen auf GDI + Bitmap-Objekt
- 9. Ein seltsames Problem mit gdi + Bitmap!
- 10. Wie zeichnet man eine weiche Linie in gdi/gdi +
- 11. Messen von Bitmap-Schriften mit OpenGL (Windows)
- 12. Wie man ein benutzerdefiniertes Bitmap in der Windows API aktualisiert
- 13. Wie man ein UIImageView dreht?
- 14. Wie konvertiert man eine gdi + Bitmap-ähnliche Struktur in eine HDC?
- 15. Winston: wie man Protokolle dreht
- 16. Wie man meinen Charakter dreht?
- 17. Windows GDI: horizontal/vertikal DPI
- 18. Wie man Kugeln in bullet3d dreht
- 19. Wie man ein Widget in GWT dreht?
- 20. Ist es möglich, BitBlt direkt auf ein GDI + Bitmap?
- 21. Transparenz zum Text in GDI
- 22. Wie kann man legitim mit GDI + blättern?
- 23. Ist es möglich, BitBlt direkt aus einer GDI + -Bitmap?
- 24. Libgdx wie man einen BitmapFont dreht?
- 25. Wie man mit Farbverlust auf GDI + Image Resize umgehen?
- 26. Wie man die Matrix des Knopfes dreht
- 27. Kivy, wie man ein Bild dreht
- 28. nicht erstellen kann Monochrome Bitmap von HBITMAP von GDI + Bitmap bekam :: GetHBITMAP
- 29. GDI + Fehler auf Bitmap.Save
- 30. Wie man einen CannonJS RigidBody dreht?
Welche Art von Rotation? 90 Grad Inkremente, willkürliche Inkremente? –