Rotation bei UIImage auslesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rotation bei UIImage auslesen

    huhu,

    ich habe mal eine grundsätzliche Frage.
    Bei meiner App werden in meinem view verschiedene UIImages vom User platziert.
    Dieser werden bewegt und auch gedreht mit den verschiedenen Gesten.
    So weit so gut.

    Um die einzelnen Bilder zu speichern und bei einer späteren Verwendung wieder so zu platzieren werden die einzelnen Daten jedes Images in einem Array gespeichert.
    Welches Image, Position auslesen und speichern ist kein Problem. Probleme macht mit das erst dann wenn ein Bild beliebig gedreht wurde.

    Gibt es irgend was um nachträglich fest zu stellen um wie viel Grad ein Bild gedreht wurde ?

    Ich hoffe ich konnte deutlich machen was ich möchte :)

    Danke schon mal im Voraus für Eure Vorschläge.......
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.
  • Naja, der Gedanke ist mir auch schon gekommen, so ist es ja nicht......

    Da ich ja bei der Rotation immer nur das Delta berechne müsste ich ja vorher den gespeicherten Winkel auslesen den neuen hinzuaddieren und dann wieder speichern.

    Daher meine Frage ob es nachträglich auch noch auszulesen ist.

    Mich wundert das, denn schließlich kann ich den CenterPoint ja auch nachträglich auslesen, aber ich habe nichts über die Drehung gefunden.
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.
  • Für jedes Image wird ein eigener UIImage View erzeugt.

    Hier ein Auszug des Codes für die Rotation:

    Quellcode

    1. - (IBAction)rotateImage:(UIRotationGestureRecognizer *)sender {
    2. snap = 0;
    3. NSMutableDictionary *itemDSNew = [[NSMutableDictionary alloc] init];
    4. NSDictionary *itemDSOld = (NSDictionary *)[messestandItems objectAtIndex:aktivItemID];
    5. if (messestandItems.count > 2) {
    6. CGFloat netRotation = [[itemDSOld objectForKey:@"rotation"] floatValue];
    7. CGFloat rotation = [(UIRotationGestureRecognizer *)sender rotation];
    8. CGAffineTransform transform = CGAffineTransformMakeRotation(rotation+netRotation);
    9. aktivImageView.transform = transform;
    10. if (sender.state==UIGestureRecognizerStateEnded) {
    11. netRotation += rotation;
    12. }
    13. [itemDSNew addEntriesFromDictionary:itemDSOld];
    14. [itemDSNew setObject:[NSString stringWithFormat:@"%f", aktivImageView.center.x] forKey:@"posX"];
    15. [itemDSNew setObject:[NSString stringWithFormat:@"%f", aktivImageView.center.y] forKey:@"posY"];
    16. [itemDSNew setObject:[NSString stringWithFormat:@"%f", rotation + netRotation] forKey:@"rotation"];
    17. [itemDSNew setObject:[NSString stringWithFormat:@"0"] forKey:@"snap"];
    18. [messestandItems replaceObjectAtIndex:aktivItemID withObject:itemDSNew];
    19. [messestandItems writeToFile:[self saveFilePath] atomically:YES];
    20. }
    21. }
    Alles anzeigen
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.
  • Hm, Dein Code verwendet doch eine Rotation Transform (CGAffineTransformMakeRotation).

    Weiterhin kennst Du den aktuellen Radianten der Rotation (rotation + netRotation). Dieser wird ja auch schon mit dem Key rotation im itemDSNew Dictionary abgelegt.

    Somit hast Du eigentlich alle Infos die Du benötigst.
  • Hallo MCDan,

    das ist richtig. da ich allerdings noch weitere Rotationsfunktionen verwende muss ich das "speichern" in jedem Code verwenden.

    Daher immer noch die Frage ob man den Rotationswinkel auch nachträglich aus einem UIImage auslesen kann ?

    Wäre toll zu wissen ob das geht oder ob es nicht geht :D

    Aber Danke schon mal für Deine Antworten.
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Svennse ()

  • Svennse schrieb:

    Hallo MCDan,

    das ist richtig. da ich allerdings noch weitere Rotationsfunktionen verwende muss ich das "speichern" in jedem Code verwenden.

    Daher immer noch die Frage ob man den Rotationswinkel auch nachträglich aus einem UIImage auslesen kann ?

    Wäre toll zu wissen ob das geht oder ob es nicht geht :D

    Aber Danke schon mal für Deine Antworten.
    es gibt doch nur einen transform pro imageview. und aus dem transform kannst du ja wieder die werte rausrechnen die du speichern möchtest.
  • Das ist richtig.
    Der Wert wird auch berechnet und gespeichert. Aber wohl nicht richtig.

    Daher die Frage ob man das auch zu einem späteren Zeitpunkt auslesen kann um wie viel Grad das Image gedreht wurde oder ob ich das nur zum Zeitpunkt des "drehen" zu ermitteln ist und auch nur zu diesem Zeitpunkt gespeichert werden kann.
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.
  • Svennse schrieb:

    Das ist richtig.
    Der Wert wird auch berechnet und gespeichert. Aber wohl nicht richtig.

    Daher die Frage ob man das auch zu einem späteren Zeitpunkt auslesen kann um wie viel Grad das Image gedreht wurde oder ob ich das nur zum Zeitpunkt des "drehen" zu ermitteln ist und auch nur zu diesem Zeitpunkt gespeichert werden kann.
    was denn nun? ist deine berechnung falsch?
    du kannst jederzeit die drehung auslesen. du kannst den transform des imageviews auslesen und die grad daraus berechnen.
    überprüfe es einfach. drehe das ding um ca 90° und stell dann die berechnung an - es sollte ca 90° oder eben 270° rauskommen wenn du korrekt rechnest.
  • MCDan schrieb:

    Wenn Du die Bilder über eine transform gedreht hast, dann könntest auch einfach die aktuelle transform speichern. Alternativ kannst Du aus einer Rotation Transform auch den Winkel bzw. Radianten (radians = atan2(transform.b, transform.a)) berechnen.

    Die Lösung, wie man aus einer Rotation Transform den Winkel bzw. Radianten berechnen kann, habe ich ja schon gepostet. Wo liegt jetzt das Problem? ?(

    Funktioniert die Berechnung nicht? Habe damit bisher keine Probleme gehabt.
  • gritsch schrieb:

    du kannst jederzeit die drehung auslesen. du kannst den transform des imageviews auslesen und die grad daraus berechnen.
    überprüfe es einfach. drehe das ding um ca 90° und stell dann die berechnung an - es sollte ca 90° oder eben 270° rauskommen wenn du korrekt rechnest.
    ok. jetzt habe ich kapiert.

    sorry MCDan, ich bin auf dem Schlauch gestanden !!!!!
    Jetzt weiß ich auch wie Du das gemeint hast.

    Ich kann über den transform mir ausgeben lassen wie die Drehung war.......
    den winkel daraus berechnen ist kein problem.
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.
  • kleiner Nachtrag damit auch andere Wissen wie ich das Problem gelöst habe:


    Quellcode

    1. UIImageView *imageView = [itemTest objectAtIndex:2];
    2. CGFloat angle = [(NSNumber *)[imageView valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
    3. float grad = angle * 180 / M_PI;
    4. NSLog(@"Winkel: %f", grad);
    Das ist jetzt nur ein Beispiel für ein Objekt im Array.

    Mit einer Schleife kann man natürlich jedes Objekt im Array abfragen ;)
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.