Image drehen



  • Hallo,

    ich weiß es gibt einige Einträge dazu. Aber bisher habe ich nur welche gefunden, die in 90° Steps drehen. Ich zeichne einen Pfeil in einem Image und will diesen dann auf meine Linie setzen. Ich habe den Anfangspunkt meiner Linie, den Endpunkt und würde diesen Winkel berechnen und das Image dann um diesen Winkel drehen. Vielleicht gibt es ja doch eine Routine, die ein stufenloses Drehen eines Image ermöglicht ..?

    Hans



  • Hallo

    Nicht der Builder (und die WinAPI auch nicht afaik). Da must du entweder eine passende externe Library einbinden (zum Beispiel ganz auf DirectX umsteigen) oder selber die Berechnungen ausführen. Ist letzendlich das Anwenden von Winkelfunktionen.

    bis bald
    akari



  • Hallo,

    ich hab mal eine Formel von einem Mathematiker bekommen. Habe da ein Kreuz, in der Mitte einen Kreis und an den Endpunkten der Linien 60, 15, 30, 45 in Label-Feldern. Diesen Kreis lege ich über Bilder von Augen. Da bei den Aufnahmen der Kopf schief gehalten werden kann und auch die Pupillen unterschiedlich groß sind kann man mit Button dann diese Grafik verschieben, drehen bzw. auch den Kreis größer / kleiner machen.

    Ich versuch mal das umzubauen auf meinen Pfeil.

    Hier die Rechtsdrehung. dGradRechts wird jeweils um Grad N inkrementiert / dekrementiert vor Aufruf der Funktion.

    frmIris->objSkalaRechts->Canvas->FillRect(frmIris->ClientRect);
          frmIris->objSkalaRechts->Canvas->Ellipse(iCircleStartRechts, iCircleStartRechts, iCircleEndRechts, iCircleEndRechts);
          double pi = 3.14159265358979;
          double dGradRechts2 = 90 - dGradRechts;
          x = dLengthRechts*cos(dGradRechts2*pi/180);
          y = dLengthRechts*sin(dGradRechts2*pi/180);
          x+=150;
          y=150-y;
          frmIris->objSkalaRechts->Canvas->MoveTo(150, 150);
          frmIris->objSkalaRechts->Canvas->LineTo(x, y);
          frmIris->lbl60R->Top = frmIris->objSkalaRechts->Top + y;
          frmIris->lbl60R->Left = frmIris->objSkalaRechts->Left + x - 5;
    
          dGradRechts2 = dGradRechts * -1;
          x = dLengthRechts*cos(dGradRechts2*pi/180);
          y = dLengthRechts*sin(dGradRechts2*pi/180);
          x+=150;
          y=150-y;
          frmIris->objSkalaRechts->Canvas->MoveTo(150, 150);
          frmIris->objSkalaRechts->Canvas->LineTo(x, y);
          frmIris->lbl15R->Top = frmIris->objSkalaRechts->Top + y - 5;
          frmIris->lbl15R->Left = frmIris->objSkalaRechts->Left + x;
    
          dGradRechts2 = dGradRechts + 90;
          x = dLengthRechts*cos(dGradRechts2*pi/180);
          y = dLengthRechts*sin(dGradRechts2*pi/180);
          x+=150;
          y+=150;
          frmIris->objSkalaRechts->Canvas->MoveTo(150, 150);
          frmIris->objSkalaRechts->Canvas->LineTo(x, y);
          frmIris->lbl30R->Top = frmIris->objSkalaRechts->Top + y;
          frmIris->lbl30R->Left = frmIris->objSkalaRechts->Left + x - 5;
    
          dGradRechts2 = 180 - dGradRechts;
          x = dLengthRechts*cos(dGradRechts2*pi/180);
          y = dLengthRechts*sin(dGradRechts2*pi/180);
          x+=150;
          y=150-y;
          frmIris->objSkalaRechts->Canvas->MoveTo(150, 150);
          frmIris->objSkalaRechts->Canvas->LineTo(x, y);
          frmIris->lbl45R->Top = frmIris->objSkalaRechts->Top + y - 5;
          frmIris->lbl45R->Left = frmIris->objSkalaRechts->Left + x - 12;
    

    Hans


Anmelden zum Antworten