neue Position nach rotate() berechnen

D

Duckemai

Fortgeschrittenes Mitglied
6
Hallo,

ich versuche gerade eine Bitmap zu drehen, und zwar so:
canvas.save();
canvas.rotate(90, AusgX(), AusgY());
canvas.drawBitmap(bitmap, AusgX(), AusgY(), paint);
canvas.restore();

Tatsächlich dreht sich die Bitmap auch, und zwar um den Koordinatenpunkt
x/y, also der oberen linken Ecke.

Das Problem ist, dass wenn ich die Fläche der rotierten Bitmap abfragen möchte, mit z.B.:
float XRangeEnd = XRangeStart + widthOfBitmap;

dann gibt er mir die Fläche der nicht gedrehten Bitmap aus, da er nicht den Rotationswinkel mit berücksichtigt. Gibt es eine Funktion, mit der ich die Fläche der rotierten Bitmap (also welche Pixel nun genau von dem Bitmap verdeckt sind) berechnen lassen kann?

Vielen Dank!

 
Zuletzt bearbeitet:
Hi,
kenne mich leider nicht so gut mit der bildverarbeitung aus, aber ich dachte canvas.restore() setzt das canvas zurück, deswegen könnte es sein dass die Fläche der rotierten Bitmap der unrotierten entspricht.
Falls das der Fall ist, solltest du die Fläche vor dem "restore" Aufruf abfragen.
Aber wie gesagt, nur eine Vermutung :).
 
IIRC verändert sich die Flache nicht wen man einen Bitmap rotiert. Oder geht es dir um den Bounding-Box?
 
Danke erst mal für die Hilfestellungen.
Mir geht es darum, dass ich eine Bitmap per Touchscreen markieren möchte.
Dafür errechne ich die Lage der (waagerechten) viereckigen Bitmap wie folgt:

float BitmapXRangeEnd = BitmapXRangeStart + width;
float BitmapYRangeEnd = BitmapYRangeStart + height;
...

//Es wurde genau auf ein Bitmap gedrückt:
if (((BitmapXRangeStart < (int) event.getX()) && (BitmapXRangeEnd > (int) event.getX())) &&
((BitmapYRangeStart < (int) event.getY() && BitmapYRangeEnd > (int) event.getY()))){...//markiere Bitmap

Doch das geht nun nicht mehr, nachdem ich rotate() angewendet habe, da die Bitmap nun nicht mehr waagerecht liegt, sondern durch das Drehen um die x/y-Koordinate (oben links) nun schräg liegt.

Gibt es eine Formel oder Methode, wie ich berechnen kann, wo genau die Kanten der nun 'schief' liegenden Bitmap verlaufen, damit ich daraus errechnen kann, welche Pixel sich unter der Bitmap befinden? Nur so kann
ich berechnen, ob eine Berührung des Bildschirms auch wirklich auf der Bitmap erfolgte.

Ich hoffe, dass ich mich verständlich ausdrücken konnte...
 
Zuletzt bearbeitet:
@ ko5tik:

Genau das ist das Problem. Die darunter liegende Fläche mit den Koordinaten für die Bitmap verändert sich nicht. Nur das "Image" dreht sich entsprechend der %-Zahl in rotate(). Wie kann ich aber nun das Koordinatenkreuz um ebenfalls diese Prozentzahl "mitdrehen"? Wenn jemand per Touchscreen das Image berührt, kann ich das ansonsten gar nicht registrieren, da die Koordianten für die Bitmap immer noch an der Stelle liegen, bevor sich das Image gedreht hat.

Weiß jemand, wie so etwas geht?
 
Zuletzt bearbeitet:

Ähnliche Themen

5
Antworten
22
Aufrufe
1.410
590239
5
D
  • Data2006
Antworten
14
Aufrufe
481
jogimuc
J
L
Antworten
4
Aufrufe
1.328
lonnie9020
L
Zurück
Oben Unten