PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Zeichnen ähnlich Paint


mittelding
2011-03-08, 14:23:17
Hallo!

In AWT/Swing lässt sich ja relativ einfach malen, ich frage mich jedoch, wie man ein Paint-ähnliches Programm umsetzt, sprich, wie man mit der Maus malen kann. Klar, mithilfe des Mouselisteners kommt man an die Koordinaten des Mauszeigers und weiß außerdem, wann die Tasten gedrückt sind und wann nicht.

Mir geht es eher um das tatsächliche malen. Also normalerweise kann man ja mit den entsprechenden Packages (Shape, geom) ganz einfach Linien und die restlichen geometrischen Grundformen malen. Aber es ist ja sicherlich nicht so sinnvoll, mit der Maus gemalte Kurven durch lauter aneinandergesetzte Minilinien zu erzeugen, oder doch?

Mir würde nichts besseres einfallen, als alle mit der Maus berührten Pixel auf der Zeichenfläche einzufärben. Habe nur sehr selten mit Java gearbeitet, aber ich hoffe, dass das Framework das hergibt.

Was meint ihr dazu, die Idee war nur so ein spontaner Einfall?


Danke!

Monger
2011-03-08, 15:48:04
Kann jetzt nicht für Java sprechen, aber von WPF kenne ich z.B. so, dass beim freien Zeichnen man quasi bei jedem MouseOver Event (bis zum loslassen) sich die aktuelle Mauskoordinate in einer "Punktwolke" merkt. Diese Punkte kann man dann entweder mit geraden Linien verbinden, oder versuchen mit irgendeiner Kurve (gibt z.B. da Bézier Hilfsmittel) eine halbwegs geschwungene Linie daraus zu interpolieren. Die wird dann gezeichnet, und nicht etwa da wo der Mauszeiger lang ist.

Mit ein bißchen Hirnschmalz kann man so kleinere Ausreißer von der Maus kompensieren. Aber ich glaub, das ist eine Wissenschaft für sich.

Der_Donnervogel
2011-03-08, 20:10:22
Was meint ihr dazu, die Idee war nur so ein spontaner Einfall?Mein spontaner Einfall bei solchen Sachen ist immer, dass es sicher schon zig Leute gibt die so ein 0815 Problem vor mir gelöst haben und riskiere deshalb einen Blick in Google. Das ist auch hier nicht anders. Mal ein Beispiel, das sich bei Google in wenigen Sekunden finden lässt:

http://www.faqs.org/docs/javap/source/index.html
bzw. dort
http://www.faqs.org/docs/javap/source/SimplePaint3.java

oder vielleicht das hier

http://sourceforge.net/projects/terppaint/

oder sich mal die Tutorials von Sun anschauen, auch da gibts normalerweise viele Infos. Im allgemeinen lohnt es sich nicht das Rad neu zu erfinden ... außer vielleicht man ist Schüler oder Student. ;)

RattuS
2011-03-09, 03:17:42
Mir geht es eher um das tatsächliche malen. Also normalerweise kann man ja mit den entsprechenden Packages (Shape, geom) ganz einfach Linien und die restlichen geometrischen Grundformen malen. Aber es ist ja sicherlich nicht so sinnvoll, mit der Maus gemalte Kurven durch lauter aneinandergesetzte Minilinien zu erzeugen, oder doch?
Greif dir mal ein Blatt Papier und einen Stift. Jetzt zeichne mal eine Linie und beobachte dich selbst dabei. Fällt dir was auf? Ja? Antwort gefunden.


Egal wie trivial die Frage ist: solche Kommentare sparst du dir hier besser. Das hier ist ein Hilfe-Forum, nicht die Lounge.

Monger


Mein obiger Text war nicht böse gemeint. Ich wollte damit nur ausdrücken, dass es tatsächlich so trivial ist, wie man denkt. Zeichnen á la MS Paint ist primitiv. Wenn du das von Handzeichnen weich aussehen lassen möchtest, musst du entweder dafür sorgen, dass du jedes Pixel "ummantelst" (Anti-Aliasing) oder die Punktemenge beim Absetzen interpolierst, so wie es Monger schon beschrieben hat.