Laden...

Zu seltenes MouseMove Ereignis / Umgehungslösung des Problems

Erstellt von el_vital vor 12 Jahren Letzter Beitrag vor 12 Jahren 847 Views
E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren
Zu seltenes MouseMove Ereignis / Umgehungslösung des Problems

Ich versuche ein Stempelwerkzeug zum retuschieren von Bildern zu implementieren.
Soweit funktioniert alles. Nur das MouseMove wird nicht oft genug ausgelöst um bei schnelleren Mausbewegung durchgehend zu zeichnen. Meine Funktion zum zeichnen ist parallelisiert und optimiert, so dass es im Schnitt 15ms für die Abarbeitung benötigt.

Jetzt kann ich mir die alte Mausposition merken und eine Differenz mit der neuen Bilden. In diesem Abstand muss ich dann alles zeichnen. Ich habe also zwei Punkte mit den jeweiligen X/Y- Koordinaten. Ich müßte mir die Steigung errechnen und zu jedem X-Wert den Y-Wert errechnen und zeichnen. Beziehungsweise würde ich nicht auf jedem Punkt zeichnen, sondern an jedem Viertel des Radius meines Werkzeugs.

Oder gibt es eine Möglichkeit die aktuelle Mausposition öfters zu bekommen?

5.742 Beiträge seit 2007
vor 12 Jahren

Meine Funktion zum zeichnen ist parallelisiert und optimiert, so dass es im Schnitt 15ms für die Abarbeitung benötigt.

Du kannst versuchen, das Zeichen und Verarbeiten komplett asynchron zu implementiern (dann natürlich auf eine Bitmap, die du anschließend im GUI-Thread zeichnest - es gibt irgendwo einen Thread dazu, wie das am schnellsten geht).
So hast du evtl. die Möglichkeit, mehr Mausevents zu erhalten.

Alternativ könntest du mal einen Blick auf DirectInput werfen - evtl. lassen sich damit höhere Inputfrequenzen erreichen. Allerdings kommt ein wenig Aufwand für Umrechnungen etc. hinzu.

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren

Du kannst versuchen, das Zeichen und Verarbeiten komplett asynchron zu implementiern

Jede Aktion (Zeichnen) ist von der vorherigen abhängig, also muss es schon synchron ablaufen.

Alternativ könntest du mal einen Blick auf DirectInput werfen - evtl. lassen sich damit höhere Inputfrequenzen erreichen. Allerdings kommt ein wenig Aufwand für Umrechnungen etc. hinzu.

Danke für das Stichwort, ich schaue es mir an.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo el_vital,

also muss es schon synchron ablaufen.

bezogen auf die Reihenfolge der Zeichenoperationen natürlich, das hat winSharp93 auch nie in Frage gestellt. Er hat nur geschrieben, wie du das Aufbauen der Zeichnung asynchron zum GUI hingekommst. Wobei ich wiederum die Notwendigkeit dafür nicht sehe, den 15ms pro Operation sind ja selbst dann, wenn man die Operation ein paar mal hintereinander für die Zwischenschritte ausführen muss, schnell genug.

Ich versuche ein Stempelwerkzeug zum retuschieren von Bildern zu implementieren.

Die Frequenz der Mouse-Moves kann man wohl nicht erhöhen, aber die Umgehungslösung sollte funktionieren. Was ist also das verbleibende Problem?

herbivore

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren

Ich habe es jetzt so gemacht wie ich es vor hatte. Ich zeichne die fehlende Strecke zwischen den MouseMove-Ereignissen nach. Allerdings habe ich das Zeichnen auf 1ms reduziert. Ich hatte jedes mal bitmap.LockBits() durchgeführt und nach dem zeichnen wieder frei gegeben. Jetzt mache ich es nur bei MouseDown und gebe es bei MouseUp wieder frei.