Rotieren in der Bildmitte



  • Hi,

    Mit dem Code von Korbinian kann ich schon gut rotieren allerdings passiert das nicht in der Bildmitte. Wie kann ich das erweitern das er um die Bildmitte rotiert?

    Hier nochmal der Code:

    template <typename T>
    void rotate(T* din, T* dout, unsigned sx, unsigned sy, double w)
    {
        for (unsigned i = 0; i < sy; ++i)
        {
            for (unsigned j = 0; j < sx; ++j)
            {
                signed rx = (signed)((double)j*cos(w) - (double)i*sin(w));
                signed ry = (signed)((double)j*sin(w) + (double)i*cos(w));
                if (rx < 0 || ry < 0 || rx >= sx || ry >= sy)
                    continue;
                dout[i*sx + j] = din[ry*sx + rx];
            }
        }
        return;
    }
    

    MFG
    willi



  • ich weiss jetzt nicht genau worum er bei dir dreht, aber sollte er un den punkt 0/0 des bildes drehen musst du vorher alle punkte verschieben. Willst du z.B. um den mittelpunkt drehen musst du das bild um bildbreite/2 und bildhöhe/2 nach obenlinks verschieben.

    Generell muss der Punkt um den du drehen willst 0/0 sein. Nennt sich auch affine transformation. Also einfach den punkt um den du drehen willst nach 0/0 schieben, dann drehen und wieder zurück schieben.

    Gruss



  • ja inmoment wird in Punkt P(0/0) gedreht.
    Allerdings kann ich das nicht ganz nachvollziehen wie das gehen soll. Denn wenn ich das Bild nach P(w*0.5/h*0.5) verschiebe dann ist doch ein Teil ausserhalb des Bildbereiches. Dabei entsteht ein Informationsverlust oder sehe ich da was falsch?


Anmelden zum Antworten