2017-03-16 2 views
1

Wie kann ich ein Bild um 90 Grad (rechts und links) ein eindimensionales Array n-Elemente drehen?C - Drehen Sie ein Bild um 90 Grad (rechts und links) mit einem Array - Bitmap

My Array ist 24-Bit-Bitmap (NxN)

Zum Beispiel meines Array

A[16] = { 
1,2,3,4 
5,6,7,8 
9,10,11,12 
13,14,15,16} 

neuen Array drehen:

{4,8,12,16 
3,7,11,15 
2,6,10,14 
1,5,9,13} 

und:

{13,9,5,1, 
14,10,6,2, 
15,11,7,3, 
16,12,8,4} 
+5

Was haben Sie versucht? Können Sie herausfinden, wo der Wert in 'A [0] [0]' enden sollte? Was passiert, wenn Sie 'A [0] [0]' mit dieser Zelle tauschen? Was müssen Sie als nächstes tauschen? – StoryTeller

+0

Sie müssen Spalten des Quell-Arrays in Zeilen des Ziel-Arrays oder Zeilen des Quell-Arrays in Spalten des Ziel-Arrays kopieren. Das einzige Problem ist, in welcher Reihenfolge Sie die Dinge tun. Beginnen Sie mit dem Schreiben einer Skelettfunktion, die die Quell- und Ziel-Arrays und deren Größe übergibt. Dann überlegen Sie genau, wie Sie Zeilen in Spalten kopieren. –

+0

Sie haben eine Zuordnung von 2D-Pixel-Koordinaten zu 1D-Array-Indizes. Schreiben Sie dies als eine Funktion der Koordinaten aus. Damit sollten Sie auch eine inverse Funktion schreiben können. Sie haben auch zwei Zuordnungen von 2D Koordinaten zu gedrehten 2D Koordinaten - schreiben Sie diese auch als Funktionen aus. Die gewünschte Transformation ist einfach eine Zusammensetzung von (1D -> 2D), (2D-Rotation), (2D -> 1D); Sie haben für alle diese Formeln geschlossen, so dass Sie in der Lage sein sollten, einen Ausdruck für die gesamte Transformation zu schreiben. –

Antwort

1

Sie können dieverwenden. Die Rotationsmatrix für 90 Grad ist einfach

[0 -1 
    1 0] 

here können Sie sehen, wie die Matrixmultiplikation in c zu tun, wenn Sie benötigen.

Verwandte Themen