[Erledigt] Bitmap drehen
-
Hallo,
ich habe ein Problem. Folgender Code:
#pragma once namespace Drehscheibe { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Drawing::Drawing2D; /// <summary> /// Zusammenfassung für Form1 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // drehung = 0; timer1->Start(); } protected: int drehung; /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::PictureBox^ pictureBox1; private: System::Windows::Forms::Timer^ timer1; private: System::ComponentModel::IContainer^ components; protected: private: /// <summary> /// Erforderliche Designervariable. /// </summary> #pragma region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox()); this->timer1 = (gcnew System::Windows::Forms::Timer(this->components)); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->BeginInit(); this->SuspendLayout(); // // pictureBox1 // this->pictureBox1->Location = System::Drawing::Point(0, 0); this->pictureBox1->Margin = System::Windows::Forms::Padding(0); this->pictureBox1->Name = L"pictureBox1"; this->pictureBox1->Size = System::Drawing::Size(1018, 740); this->pictureBox1->TabIndex = 0; this->pictureBox1->TabStop = false; this->pictureBox1->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::pictureBox1_Paint); // // timer1 // this->timer1->Interval = 50; this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(1017, 737); this->Controls->Add(this->pictureBox1); this->Name = L"Form1"; this->Text = L"Form1"; (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->EndInit(); this->ResumeLayout(false); } #pragma endregion private: System::Void pictureBox1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { drehung++; e->Graphics->RotateTransform((float)drehung); e->Graphics->DrawImage(gcnew Bitmap("/*Pfad zum Bild*/"), 250, 250); } private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { pictureBox1->Refresh(); } }; }
Wenn ich das Programm ausführe, dreht sich das Bild zwar, aber es dreht sich nicht um sich selbst. Wie kann man den Rotationspunkt verändern?
PS: Zeigt mir nicht den Eintrag "Windows Forms und Visual C++ MACHT KEINEN SINN!"
-
Schau mal hier http://msdn.microsoft.com/en-us/library/vstudio/ms535805(v=vs.85).aspx das müsste dir helfen.
MfG mdn
-
Danke für die schnelle Antwort! Kann es leider gerade nicht ausprobieren, weil ich gerade nicht an den Pc kann. Werde es morgen mal probieren, wenn ich Zeit habe. (Schreibe gerade am Handy)
-
Habe es folgendermaßen gelöst:
private: System::Void pictureBox1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { drehung++; e->Graphics->TranslateTransform(400, 400); e->Graphics->RotateTransform((float)drehung); e->Graphics->DrawImage(gcnew Bitmap(bilder->Images[0]), -200, -200, 400, 400); }
Wobei ich eine ImageList verwendet habe, um das Bild zu speichern.