Fehler in If-Abfrage beim Zeichnen?
-
Hallo, Ich habe zwei Fragen auf einmal. Zum einen, gibt es ne bessere und schnellere Variante als die unten?
Und zum Zweiten, Die Variable mouseDown wird bei der Instanzierung auf false gesetzt. beim Öffnen eines Bildes etc. ist sie weiterhin auf False.
Wenn jedoch das Bild da ist und die Maus bewegt wird innerhalb der pictureBox, ist die Variable bis zur if Anwesung auf false. Danach wundersamer auf true. und ich hab nie das mouseDown Event ausgelöst. Wisst Ihr woran das liegt?
private: System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { if(e->Button == System::Windows::Forms::MouseButtons::Left) { mouseDown = true; if(write){ Color c; //point->Add(gcnew SchreibKoordinaten(e->X,e->Y)); c = zeichnen->GetPixel(e->X,e->Y); zeichnen->SetPixel(e->X,e->Y, Color::FromArgb(c.A, 255,255,255)); pictureBox1->Image = zeichnen; } } } private: System::Void pictureBox1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { //point[anzahl_gezeichnet]->setKoord(e->X, e->Y); if (mouseDown= true) { Color c; //point->Add(gcnew SchreibKoordinaten(e->X,e->Y)); c = zeichnen->GetPixel(e->X,e->Y); zeichnen->SetPixel(e->X,e->Y, Color::FromArgb(c.A, 0,0,0)); pictureBox1->Image = zeichnen; } } private: System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { if(mouseDown) { Color c; //point->Add(gcnew SchreibKoordinaten(e->X,e->Y)); c = zeichnen->GetPixel(e->X,e->Y); zeichnen->SetPixel(e->X,e->Y, Color::FromArgb(c.A, 255,255,255)); pictureBox1->Image = zeichnen; mouseDown = false; anzahl_gezeichnet++; } }
-
Typischer Anfängerfehler:
if (mouseDown= true)
-
Ich weiß. Ich habs vorher nur mit if(mousDown) gehabt.. aber da hat er das selbe Prob gehabt.
Dann hab ich noch ne zweite Variable rein genommen, die auch stadartmäßig auf false gesetzt ist und der zeichnet trotzdem...
-
Th69 schrieb:
Typischer Anfängerfehler:
if (mouseDown= true)
immer noch dieses Problem!!!
if (mouseDown== true)
deshalb die Info "typischer Anfängerfehler"
-
System::Void pictureBox1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { //point[anzahl_gezeichnet]->setKoord(e->X, e->Y); if(mouseDown) { Color c; //point->Add(gcnew SchreibKoordinaten(e->X,e->Y)); c = zeichnen->GetPixel(e->X,e->Y); zeichnen->SetPixel(e->X,e->Y, Color::FromArgb(c.A, 0,0,0)); pictureBox1->Image = zeichnen; }
Damit hats nicht funktioniert... im normalfall macht er nichts, wenn die variable nicht auf true gesetzt ist... so hab ich das gelernt uns so hats bisher auch funktioniert. daher versteh ich nicht was der fehler ist...
-
Hast Du schon mal mit den Debugger den Code geprüft?
Bei mir funzt es!
-
ja. hab ich. Die Variable ist bis zur If-Bedingung auf false. sofern er die if bedingung überprüft ist die variable auf true, was natürlich ziemlich schlecht ist... da ist ja grad das problem ^^
-
Hab jetzt auch noch ein anderes Problem mitbekommen... Wenn das Fenster kleiner gemacht wird und dann runter gescrollt wird, dann zeichnet er oben auf dem Bild weiter, obwohl es eigentlich komplett andere Koordinaten sein müssten..
-
So, Fehler gefunden. es lag an
bool^ mouseDown
kennt von euch denn noch jemand eine Schnellere Effektivere Methode um auf einem Bild in Realtime zu zeichnen?