Bild 90 Grad umderhen (Animation)
-
Dieser Quellecode dreht das Bild 90 Grad um. Ich möchte aber das bild srittweise(animieren) 90 Grad umdrehen. Kann jemanden mir helfen.
void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics::TBitmap *opj; Graphics::TBitmap *obj = new Graphics::TBitmap; obj->LoadFromFile("bild1.bmp"); Graphics::TBitmap* BildQuelle; Graphics::TBitmap* BildZiel; RGBTRIPLE *ptr; RGBTRIPLE *newscanline; BildQuelle = new Graphics::TBitmap; BildZiel = new Graphics::TBitmap; BildQuelle->PixelFormat = pf24bit; BildQuelle->Assign(obj); BildZiel->PixelFormat = pf24bit; BildZiel->Palette = BildQuelle->Palette; BildZiel->Height = BildQuelle->Width; BildZiel->Width = BildQuelle->Height; for (int y = 0; y < BildQuelle->Width; y++) { newscanline = static_cast<RGBTRIPLE*>(BildZiel->ScanLine[y]); for (int x = 0; x < BildQuelle->Height; x++) { ptr = static_cast<RGBTRIPLE*>(BildQuelle->ScanLine[x]); newscanline[BildQuelle->Height-1 - x] = ptr[y]; } } obj->Assign(BildZiel); Canvas->Draw(50,50,BildZiel); delete obj; delete BildQuelle; delete BildZiel; }
Edit:
Bitte die Code-Tags benutzen. Danke![ Dieser Beitrag wurde am 10.03.2003 um 16:55 Uhr von Jansen editiert. ]
-
Ein Lösungsweg währe:
Per Timer 30 Sekunden lang jede Sekunde das Bild um 3 Grad drehen. Dann dauerts zwar lang aber du hast ne langsame Animation(Rotation). Die Zeit und die Gradzahl kann natürlich variieren.MfG
Basti
-
Das ist ja mal ein toller Vorschlag!
Das Problem ist doch gerade die Realisierung der Drehung mit variablen Gradzahlen. Den Code hast du dir offensichtlich nicht angesehen, sonst hättest du sicher auch festgestellt, dass der dafür auch nicht ansatzweise geeignet ist.
Timer:
Aus o.g. Grund verschiebe ich das nach Spiele/Grafik, dort kannst du dich erstmal allgemein zu dem Problem beraten lassen. Wenn du dann BCB-spezifische Fragen zur Implementierung eine entsprechenden Algorithmus hast kannst du gerne wieder im BCB-Forum nachfragen.
-
IIRC steht dazu was im FAQ, wenn nicht, sollte mal langsam was hin!
-
Mit WinAPI- Funktion
PlgBlt(.....) kann ein Bitmap beliebig gedreht, gestretcht, verzerrt werden!
Musst mal in WinApi- Hilfe nachschauen.Ist 'ne ziemlich 'verkorkste' Koordinaten- Rechnerei:
Fuer Quelle und Ziel muessen je 3Punkte angegeben werden.
Dafuer aber Drehung und Parallelogrammverzerrungen moeglich!