BMP Bild drehen



  • Hio,

    ich möchte ein Bitmap Bild um X° drehen.
    Ich bin nun auf der Suche nach Denkanstößen dazu,
    bitte keine fertigen Lösungn 😉

    Danke schonmal.



  • Hallo

    Stichwort Rotationsmatrix
    Der Builder hat dafür keine eingebaute Funktion. Entweder implementierst du so eine Funktion selber, oder du sucht dir eine entsprechende Fremdbibliothek. Spwas ist in vielen Grafikbibliotheken dabei, zum Beispiel Direct Draw.

    bis bald
    akari



  • Hio, danke schonmal 😉

    könnte mir jmd erklären wie ich
    mir mit dieser Formel:
    http://upload.wikimedia.org/math/0/e/a/0ea482013494702fba0892804531be0f.png

    meine neuen Koordinaten berechnen kann?
    Bzw, mir die Formel erklären.



  • Du mußt diese Matrix mit deinen einzelnen Koordinaten multiplizieren (R * (x,y)).
    Ausgeschrieben bedeutet das, daß du jeweils den Positionsvektor über die einzelnen Zeilen der Matrix legst und dann die Summe aus den Teilprodukten bildest:

    x_rot = x * cos(a) - y * sin(a)
    y_rot = x * sin(a) + y * cos(a)
    

    Du mußt dies dann für jeden einzelnen Pixel des Bildes berechnen (so daß du am besten sin(a) und cos(a) nur einmal berechnest).

    Wenn du aber nur um 90, 180 oder 270 Grad drehen willst, dann ist es einfacher, wenn du die Pixel einfach umkopierst (x und/oder y vertauschen).
    Dafür könnte ich dir eine selbstgeschriebene Klasse anbieten (mit Spiegeln, Rotieren, Invertieren und Verkleinern).



  • ah, super, hat geklappt 🙂

    Mein gedrehtes Bild ist zwar komischerweise mit weißen
    Punkten übersät aber ich denke das kriege ich auch noch
    hin 😉



  • Das mit den weißen Punkten liegt daran, daß nicht alle Pixel exakt getroffen werden, d.h. diese entstammen noch dem leeren (weißen) Ursprungsbild.

    Evtl. wäre es besser, den Vorgang umzudrehen und die Pixel des neuen (rotierten) Bildes zu durchlaufen. Dann bräuchtest du nur die Inverse der Rotationsmatrix bzw. den negativen Winkel einzusetzen (Drehung um z.B. 45 Grad nach rechts entspricht ja einer Drehung um -45 Grad nach Links).



  • Hallo Zusammen.

    Da dies ein relativ neuer Thread ist und ich keinen neuen erstellen wollte, schreibe ich mein Anliegen hier rein.

    Ich habe mir die Klasse TRotateBitmap von http://www.bornhaupt.de/CM/index.php?rotatebitmap runtergeladen (Link stand hier irgendwo im Forum) 🙂

    Nun habe ich die Header-datei eingebunden und siehe da, es kommt folgende Meldung.

    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__fastcall Bitmaprotate::TRotateBitmap::Execute(Extctrls::TImage *, Extctrls::TImage *, double, double, bool, Graphics::TColor)' referenziert von D:\PROJEKTE\DELPHI UND C++\C++\PANZER\DEBUG\CODE.OBJ

    Hier ist noch der Code, wie es eingebunden und angewandt wurde.

    #include <BitmapRotate.hpp>
    
    TRotateBitmap *bild;
    
    bild->Execute(Image1,Image1,(double)220,(double)1,true,Graphics::clWhite);
    
    delete bild;
    

    Aufgrund der Meldung, denke ich, dass ich hier ein Eintrag erstellen muss:

    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    

    Jedoch habe ich keine Ahnung wie. 😞

    Ich hoffe, dass mir jemand helfen kann und bedanke mich bereits jetzt für das durchlesen meines Anligens. 🙄



  • Füg die mitgelieferte *.lib deinem Projekt über Projekt -> Dem Projekt hinzufügen hinzu.



  • Danke für die Antwort.

    Jedoch war da nur eine .pas -Datei vorhanden. Also musste ich aus der eine hpp und lib Datei erstellt.

    Aber danke für die Gedankenstütze.


Anmelden zum Antworten