2010-02-16 17 views

Antwort

8

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.

+2

Ich dachte, er fragte nach GDI? –

+5

@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. –

+1

Bessere Stick mit roher GDI + Implementierung als RotateFlip ist berüchtigt dafür, die 'Generic GDI + error occured' Ausnahme ziemlich oft zu werfen. –

6

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.

+0

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 –

3

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.

+0

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