AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi vernünftiges Freihandzeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

vernünftiges Freihandzeichnen

Ein Thema von TheAn00bis · begonnen am 3. Dez 2004 · letzter Beitrag vom 3. Dez 2004
Antwort Antwort
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#1

vernünftiges Freihandzeichnen

  Alt 3. Dez 2004, 16:47
Hi,

ich bin gerade dabei eine Art Paint zu schreiben, habe auch Rechteck zeichnen etc schon fertig, eigentlich sollte das Freihandzeichnen ja auch kein Problem darstellen. Ich zeichne einfach auf die aktuelle Mausposition bei MouseMove ein kleines gefülltes Rechteck.

Allerdings scheint das MouseMove zu selten abgefragt zu werden, so dass bei schnelleren Mausbewegungen Lücken entstehen.

Mir sind follgende Möglichkeiten eingefallen:

1. Lücken mit Linien füllen (gefällt absolut nicht, also verworfen)
2. Mausbewegungsgeschwindigkeit verlangsamen (wäre ok, ist das möglich?)
3. eine schnellere Abfrage programmieren (sicherlich mit meinen Kentnissen unmöglich, oder?)

Habt ihr andere Ideen oder Lösungsansetzte für die, die mir eingefallen sind?


P.S.: Wäre schön wenn das ganze unter Delphi4 realisierbar wäre!

Edit: Falls es wichtig ist: Untergrund ist Paintbox
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#2

Re: vernünftiges Freihandzeichnen

  Alt 3. Dez 2004, 16:53
Ich weis nicht, ob man mit DirectX eine schnellere Abtastrate für die Maus hinbekommt. Aber das wäre ein Ansatz.

Die 2. Möglichkeit wäre, wenn du die "Löcher" nicht mit Linien verbindest, sondern mit einer Spline. Also Kurven, die deine Linien interpoliert berechnen und darstellen.

Ich habe schon in vielen Programmen dieses Problem gesehen. Die haben es bis jetzt alle mit Linien verbunden. Ausser meines wissens in CorelDraw. Da wird eine Freihandlinie "geglättet" nach dem Splineprinzip.
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#3

Re: vernünftiges Freihandzeichnen

  Alt 3. Dez 2004, 17:04
Wahrscheinlich ist diese Methode auch garnicht so schlecht wie ich gedacht habe, als du gesagt hast, dass das die meisten Programme es so machen ist mir aufgefallen, dass Paints Freihandzeichnungen genauso eckig wirken, wie meine.

Vorher kam mir das bei meinem Programm extrem eckig vor, aber wenn es bei Paint genauso ist....

Trotzdem wäre ich weiterhin an einer besseren Lösung interessiert! Geht das Mit der Mausverlangsamerung?

Edit: Hab mir das gerade mal in Flash angeschaut, dort kann ich extrem schnell kurvenförmige Linien ziehen, die dennoch nicht aus Strecken, sondern ausschließlich aus Kurven bestehen.. vll auch diese Spline Methode, werde mich mal ein wenig danach erkundigen.

//Edit: Hab vergessen zu sagen, dass ich hier Linien gemeint habe
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#4

Re: vernünftiges Freihandzeichnen

  Alt 3. Dez 2004, 18:53
Beim starten des zeichnens startest du einen timer der in ganz kurzen Intervallen die Mausposition abfragt und an die entprechenden Stellen zeichnet.

Is nur so eine Idee, keine Ahnung ob das funktioniert.
Ben
---------------------------------------
Spielanleitung !? Wieso ? Wozu ?
Im Quelltext steht doch alles drin !
Zitat: Ich selbst (1998)
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#5

Re: vernünftiges Freihandzeichnen

  Alt 3. Dez 2004, 19:31
Timer schafft nicht weniger als 20ms (auch wenn er auf 1ms gestellt ist), schließt sich somit aus. Was ich mir überlegt habe ist zwei Timer zu nehmen und den einen 10ms später zu starten, und beide auf 1ms zu stellen, dann das Ereignis bei beiden onTimer-Events auszuführen, die ja abwechselnd wären. Allerdings klappt das ganze nicht, da ich nicht weiß, wie ich die um 10ms verzögerte Startzeit festlegen soll.

Könnte man nicht theoretisch unendlich Timer bei onCreate aktivieren, alle auf 1ms(praktisch=20ms), bei dieser Menge würden die doch alle etwas verzögert starten, wenn man jetzt auf alle dieser Timer das "Mausposition finden und dort zeichnen"-Event läge, hätte man dann nicht eine genaue Zeichnung?
  Mit Zitat antworten Zitat
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#6

Re: vernünftiges Freihandzeichnen

  Alt 3. Dez 2004, 19:57
Wenn du DirectX benutzt, hab ich jetzt auf anhieb keine Lösung, aber wenn du das mit Canvas realisierst ...

... dan solltest du keine Rechtecke sondern Linien zeichnen
Delphi-Quellcode:
    begin
     Canvas.LineTo(X, Y);
    end;
So hab ich das ganze realisiert und das hat damals gut funktioniert und die MouseMove schnelligkeit hat ausgereicht!

MFG
Maximus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz