Images drehen / Animation

A

ai-gamecock

rund um images (z.B. Images drehen / Animation)

So hallo erstmal...
1. Ich wollt mal wissen ob man ein Image im BCB6 drehen kann und wenn ja wie und um wie viel ° (Grad). Oder ob man das Bild im Image drehen kann (wieder um wie viel Grad).
2. Mich würd auch noch interessieren ob man eine Animation machen kann, ohne einen Timer bzw. den Beehl "Sleep(x)" zu verwenden.
Vielen dank für die Antworten im vorraus,
AI::gamecock
 
Zuletzt bearbeitet von einem Moderator:

Test

Erfahrenes Mitglied
zu 2.:
Du könntest einen extra Thread verwenden der unabhängig vom Hauptprogramm die Animation durchführt.
 
A

ai-gamecock

zu 2.:
Du könntest einen extra Thread verwenden der unabhängig vom Hauptprogramm die Animation durchführt.
->und wie soll der dann ausschauen?

und noch eine Frage:
3. Wie malt man ein Bild in ein Image (also dass ich dann aus mehreren zB Bitmaps die Bilder in ein Image reintut)?
 
Zuletzt bearbeitet von einem Moderator:

Test

Erfahrenes Mitglied
Code:
DWORD WINAPI DrehFunktion(LPVOID hwnd)
{
 while()
 {
  //hier dann den Code zum Drehen einfügen
 }
}

void StartThread()
{
 DWORD ThreadID;
 HANDLE hThread;
 hThread=CreateThread(NULL,0,DrehFunktion,Application->Handle,0,&ThreadID);
}
 
A

ai-gamecock

ja ne is klar erklär mal den code den check ich nicht (alle C++-Kenntnisse kommen aus dem buch "C++ für Kids" welches mit VC++ arbeitet, aus übertragung von delphi 3 und von hier; d.h. ich glaub mir fehlen n paar C++ Grundlagen *lol*)
 

Flegmon

Erfahrenes Mitglied
Test hat gesagt.:
Code:
DWORD WINAPI DrehFunktion(LPVOID hwnd)
{
 while()
 {
  //hier dann den Code zum Drehen einfügen
 }
}

void StartThread()
{
 DWORD ThreadID;
 HANDLE hThread;
 hThread=CreateThread(NULL,0,DrehFunktion,Application->Handle,0,&ThreadID);
}

Mit der Funktion CreateThread wird ein Thread erstellt. Sie liefert ein Handle zurück welches in hTread gespeichert wird. Der Funktion übergibt man einige Parameter. Unter anderem die eigentliche Thread-Funktion( hier DrehFunktion) und ein DWORD Zeiger welcher die ID des Threads speichert. Der DWORD Zeiger ist in neueren Windows Versionen nicht notwendig, in älteren Versionen schlägt die Funktion aber fehl falls er nicht übergeben wird.
Die Thread-Funktion wird dann in regelmäßigen Abständen( je nach Priorität) aufgerufen.

Am Ende muss der Thread noch geschloßen werden( hier im Code nicht enthalten).

Schau mal in der MSDN-Library. :)
 

Test

Erfahrenes Mitglied
Flegmon hat gesagt.:
Am Ende muss der Thread noch geschloßen werden( hier im Code nicht enthalten).
Natürlich gehört in die while-Schleife noch den Abbruchbedingung. Dies kann z.B. eine globale Variable oder ein Event sein.
 
A

ai-gamecock

ok danke;
und wie dreht man son bild jetzt?
und wie steckt man mehrere bilder (z.b. aus bitmaps) in ein image, sodass sie nebeneinander (oder sonstwie) abgebildet werden?
 
A

ai-gamecock

so jetzt weis ich immerhin (nach sehr diffizilen selbsttests) wie man ein Bild an einem beliebigen ort im image darstellt...
aber wie man ein Bild dreht, weis ich immer noch nicht :confused: ! Bitte helfen!
ich hätt noch ne Frage zu Farbwerten in Images:
1.allgemein: wie definiere ich eine (beliebige) Farbe (in html wärs ja #FFFFFF, geht aber in C++ irgendwie nicht), die ich dann zB mit Canvas->Pixels... irgendwo hinmalen kann
2. wie kann ich eine Farbe auslesen und verändern (z.B. dass es erst hellgrau ist und ich dann quasi ein rotes leuchten drauf"zauber")?
 
Zuletzt bearbeitet von einem Moderator:
A

ai-gamecock

ich antworte mir gerne selber...
und für alle dies wissen wollen tipp ich meine erkenntnisse auch noch ein.
1. Bild im Image darstellen:
wenn mans weis ganz einfach.
erstmal Bild definieren mit
Code:
TPicture *Bild;
(wie eine ganz normale Variable)
dann mit
Code:
Bild=new TPicture;
irgendwo im Quelltext das Bild erstellen
und dann mit
Code:
Bild->LoadFromFile(Dateiname);
(Dateiname muss ein String sein) irgendwoher laden.
ums im Image darzustellen gibts die einfache Methode
Code:
Image1->Picture=Bild;
oder etwas differenzierter
Code:
Image1->Canvas->Draw(x,y,Bild->Graphic);
(erklärt sich, denke ich, von selbst; Graphic ist einfach nur der Bildinhalt)
wer das Bild jetzt aber Transparent haben will (z.B. wegen Hintergrund) muss vorher noch
Code:
Bild->Transparent=
und dann entweder Farbe (z.B. clWhite) oder "true" oder "false" hinschreiben, wobei ich nicht weis nach welchen kriterien bei "true" die transparente Farbe ausgewählt wird, war bei mir schon mal sehr komisch).
soviel dazu.

Wer animationen machen will, der sollte noch
Code:
Form1->DoubleBuffered=true;
irgendwo an den anfang schreiben, sonst flackerts.

2. Farbwerte zuweisen/verändern
geht auch mit Canvas.
Code:
Image1->Canvas->Pixels[x][y]=0x00FF00FF;
Image1->Canvas->Pixels[x][y]+=0x0000FF00;
gibt als resultierende Farbe (zumindest theoretisch) weiß. näheres zu Farbwerten gibts in der Hife (einfach nach "TColor" suchen).

Und ich will jetzt gerne mal wissen, wie man ein Bild dreht! Wenns keiner weis, dann schreibts wenigstens hin dass es nicht geht! BITTEBITTEBITTE! und vielen Dank im voraus.