Hi. Ich hab diesmal etwas komplizierteres (für mich zumindest)
Da ich im net nichts sinnvolles gefunden habe schreib ich euch mal mein Anliegen.
Und zwar. Ich kann ja mittlerweile zeichnen. Bin auch ganz stolz darauf =)
Problem ist nun, ich hab als Aufgabe bekommen, dass Ich das Gezeichnete auch wieder Rückgängig machen muss. Also radieren.
Die Koordinaten werden in einem Array gespeichert. Und jedes Abgeschlossene Element ist ein Objekt, in dem die Koords als Array hinterlegt sind. Ich weiß, wie ich das Gezeichnete weiß machen kann.
Das darf aber nicht sein. es muss der entsprechende Farbcode zurück geführt werden. und zwar willkürlich an einem Beliebigen Punkt im Bild. Ich kann euch ja mal die entsprechenden Code-Teile geben. Ich bin mir nur nicht sicher ob das der Effizienteste Weg ist, da das Zeichnen So definitiv zu langsam ist...
Das mit dem Radieren ist eine zusatz Boolsche variable, damit ich das getrennt gehalten bekomme.
Ich weiß, die Methoden werden jetzt durch das Radieren sehr lang, oder sollte ich da noch zusätzliche Methoden für nutzen? und ist der Ansatz der richtige um die Originalpunkte wiederherzustellen?
Da ich im net nichts sinnvolles gefunden habe schreib ich euch mal mein Anliegen.
Und zwar. Ich kann ja mittlerweile zeichnen. Bin auch ganz stolz darauf =)
Problem ist nun, ich hab als Aufgabe bekommen, dass Ich das Gezeichnete auch wieder Rückgängig machen muss. Also radieren.
Die Koordinaten werden in einem Array gespeichert. Und jedes Abgeschlossene Element ist ein Objekt, in dem die Koords als Array hinterlegt sind. Ich weiß, wie ich das Gezeichnete weiß machen kann.
Das darf aber nicht sein. es muss der entsprechende Farbcode zurück geführt werden. und zwar willkürlich an einem Beliebigen Punkt im Bild. Ich kann euch ja mal die entsprechenden Code-Teile geben. Ich bin mir nur nicht sicher ob das der Effizienteste Weg ist, da das Zeichnen So definitiv zu langsam ist...
Code:
void Form1::pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if(e->Button == System::Windows::Forms::MouseButtons::Left && !radieren) {
mouseDown = true;
point->Add(gcnew SchreibKoordinaten(e->X + hScrollBar1->Value,e->Y + vScrollBar1->Value));
layer->FillRectangle(Brushes::Black,e->X + hScrollBar1->Value,e->Y + vScrollBar1->Value, 2, 2);
pictureBox1->Invalidate();
}
if(e->Button == System::Windows::Forms::MouseButtons::Left && radieren) {
c = kopie->GetPixel(e->X + hScrollBar1->Value,e->Y + vScrollBar1->Value);
layer->SetPixel(e->X + hScrollBar1->Value,e->Y + vScrollBar1->Value,Color::FromArgb(c.A,c.R,c.G,c.B));
}
}
void Form1::pictureBox1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if(mouseDown && !radieren) {
p = Point(e->X + hScrollBar1->Value, e->Y + vScrollBar1->Value);
layer->DrawLine(pen1, point[anzahl_gezeichnet]->getKoord(),p);
point[anzahl_gezeichnet]->setKoord(e->X + hScrollBar1->Value, e->Y + vScrollBar1->Value);
region1 = gcnew System::Drawing::Region(Rectangle(e->X + hScrollBar1->Value -20, e->Y + vScrollBar1->Value-20, 40,40));
pictureBox1->Invalidate(region1);
}
if(mouseDown && radieren) {
}
}
void Form1::pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if(e->Button == System::Windows::Forms::MouseButtons::Left) {
if(mouseDown && !radieren) {
p = Point(e->X + hScrollBar1->Value, e->Y + vScrollBar1->Value);
layer->DrawLine(pen1, point[anzahl_gezeichnet]->getKoord(),p);
point[anzahl_gezeichnet]->setKoord(e->X + hScrollBar1->Value, e->Y + hScrollBar1->Value);
mouseDown = false;
pictureBox1->Invalidate();
tester = gcnew HackenTest(point[anzahl_gezeichnet]->listAusgabe());
if(tester->istHacken()) {
aufbauAntworten();
contM->Show(pictureBox1,point[anzahl_gezeichnet]->getKoord() );
}
++anzahl_gezeichnet;
}
if(mouseDown && !radieren) {
}
}
}
Das mit dem Radieren ist eine zusatz Boolsche variable, damit ich das getrennt gehalten bekomme.
Ich weiß, die Methoden werden jetzt durch das Radieren sehr lang, oder sollte ich da noch zusätzliche Methoden für nutzen? und ist der Ansatz der richtige um die Originalpunkte wiederherzustellen?