1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

neue Position nach rotate() berechnen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Duckemai, 12.04.2011.

  1. Duckemai, 12.04.2011 #1
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    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: 12.04.2011
  2. Sabian, 12.04.2011 #2
    Sabian

    Sabian Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    2
    Registriert seit:
    21.12.2010
    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 :).
     
  3. ko5tik, 12.04.2011 #3
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    IIRC verändert sich die Flache nicht wen man einen Bitmap rotiert. Oder geht es dir um den Bounding-Box?
     
  4. Duckemai, 12.04.2011 #4
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    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: 12.04.2011
  5. Duckemai, 12.04.2011 #5
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    @ 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: 13.04.2011

Diese Seite empfehlen