Grafikprogramm, zeichnen mit Maus

Status
Nicht offen für weitere Antworten.

morritza

Mitglied
Moin!!
Hey ich bräuchte mal ein bisschen Hilfe. Hab hier ein Malprogramm, mit dem ich auf nen BufferedImage zeichnen möchte. Das ist mein erstes Problem. Wenn ich gezeichnet habe und das dann speichern möchte, speichert er nur ein schwarzes Bild welches dann auch nur die größe des "Startfensters" hat also: main.setSize(640, 480);


Dann zum zweiten Problem was ich nicht in den Griff bekomme. Habe vor verschiedene Zeichenfunktionen einzubinden wie Linie,Kreis,Rechteck und Punkte(sollen fließend dargestellt werden)

Code:
Variablen:
	private JDialog dialog;

	private JLabel status;

	private JFrame f = new JFrame("Test");

	private int x, y, x2, y2, breite; // Var für Zeichenoption

	private BufferedImage image;

	private boolean reset = true; // Check ob immer noch gezeichnet wird

	private int werkzeug; // Var für Werkzeug auswahl



	public void paint(Graphics g) {
		// BufferedImage erstellen wird benötigt für ImageIO.write
		BufferedImage image = new BufferedImage(bild.getWidth(), bild
				.getHeight(), BufferedImage.TYPE_INT_RGB);

		// Bild für image malen
		Graphics2D big2d = image.createGraphics();
		big2d.drawImage(image, null, 0, 0);

		Graphics2D g2 = (Graphics2D) g;

		if (werkzeug == 1) {
			System.out.println("Breite 4x");

				g2.drawLine(x, y, x2, y2);
		}
		if (werkzeug == 2) {
			// (int x, int y, int width, int height)
			g2.drawOval(x, y, x2 - x, y2 - x);
		}
		if (werkzeug == 3) {
			// (int x, int y, int width, int height)
			g2.drawRect(x, y, x2, y2);
		}
		if (werkzeug == 4) {

			g2.drawLine(x, y, x2, y2);
			

		}
	}

	// Sammeln der Maus Informationen und repaint()
	private class MouseHandler implements MouseInputListener {
		public void mouseClicked(MouseEvent e) {
			status.setText("entered at (" + e.getX() + ", " + e.getY() + ")");
			System.out.println("ich will hier zeichnen:" + e.getX() + " "
					+ e.getY());

		}

		public void mouseEntered(MouseEvent e) {
			status.setText("entered at (" + e.getX() + ", " + e.getY() + ")");

		}

		public void mouseExited(MouseEvent e) {
			status.setText("exited at (" + e.getX() + ", " + e.getY() + ")");

		}

		public void mousePressed(MouseEvent e) {
			status.setText("pressed at (" + e.getX() + ", " + e.getY() + ")");

			if (werkzeug == 1 || werkzeug == 2 || werkzeug == 3) {
				x = e.getX() + 4;
				y = e.getY() + 48;
			}
		}

		public void mouseReleased(MouseEvent e) {
			status.setText("released at (" + e.getX() + ", " + e.getY() + ")");

			if (werkzeug == 1 || werkzeug == 2 || werkzeug == 3) {
				x = e.getX() + 4;
				y = e.getY() + 48;
				repaint();
			}

		}

		public void mouseDragged(MouseEvent e) {
			status.setText("dragged at (" + e.getX() + ", " + e.getY() + ")");
			if (werkzeug == 4) {
				// wenn maus beweg bzw resetet wurde neue Koordinaten
				if (reset) {
					reset = false;
					x = e.getX() + 4;
					y = e.getY() + 48;
					repaint();
				}
				x2 = e.getX() + 4;
				y2 = e.getY() + 47;
				repaint();
			}
		}

		public void mouseMoved(MouseEvent e) {
			status.setText("moved at (" + e.getX() + ", " + e.getY() + ")");

				reset = true;			
		}

	}




//  ZUM Speichern:

			if (e.getSource() == save) {
				// neuer JFileChooser zum Speichern
				JFileChooser fc = new JFileChooser();
				int returnVal = fc.showSaveDialog(Grafikprogramm.this);
				if (returnVal == JFileChooser.APPROVE_OPTION) {
					File file = fc.getSelectedFile();

					// Schreiben mit ImageIO
					try {

						ImageIO.write(image, "jpg", file);
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
			}


Ich hoffe das euch der Code im zusammenhang aussagekräftig genug ist :)
Würd mich riesig freuen wenn mir einer weiterhelfen kann.


mfg moritz
 
B

Beni

Gast
Wieso genau erstellst du bei jedem Aufruf von "paint" ein neues Bild? Du zeichnest garnie auf das originale "image", nur immer auf diese lokale Variable.
 

morritza

Mitglied
hmm Dafür gibts kein guten Grund! Hast du recht. Das müsste ja wirklich nur einmal geschehen.

Auf big2d zeichnen funktioniert auch nicht so wirklich. Da nimmt er immer falsche Koordinaten,die sau. Gespeichert wird so auch nichts. :?:
 

Evil-Devil

Top Contributor
Ich würde einfach beim Start des Programms ein je nach User Wünschen großes Bild anlegen und dann immer auf dem zeichnen. Dann sollte es auch beim speichern selbiges kein Problem geben. Einfach mit ImageIO speichern/laden und gut ist.
 

morritza

Mitglied
Hmm ich weiss nicht ob ich das richtig verstanden hab..

Meine Paintmethode soll doch auf das erstellte BufferedImage malen.
Das Caste ich dann als big2d und damit kann ich doch drauf malen?!
Somit hätte ich doch schon die vorgegebene Größe zum zeichen auf das komplette Bild festgelegt.


Code:
			// BufferedImage erstellen wird benötigt für ImageIO.write
			image = new BufferedImage(bild.getWidth(), bild.getHeight(),
					BufferedImage.TYPE_INT_RGB);

			// Bild für image malen
			Graphics2D big2d = image.createGraphics();

			int result = fileChooser.showOpenDialog(Grafikprogramm.this);
			// Laden des Dateiauswahl dialogs
			if (result == JFileChooser.APPROVE_OPTION) {
				String name = fileChooser.getSelectedFile().getPath();
				bild.setIcon(new ImageIcon(name));
				opennow.setEnabled(false);
				close.setEnabled(true);
				menuBearbeiten.setEnabled(true);
			}
		}

Nur übergibt er das ja nicht an die Paint Methode sondern dort mache ich ja nen neues Graphics Objekt.
public void paint(Graphics g):
Code:
Graphics2D g2 = (Graphics2D) getGraphics(); //<- doppelt aber anders weiss ich nicht wie es geht

Wie bekomm ich das denn hin das er aus dem erstelltem FileChooser-Image mir so ne big2d macht damit ich in der Paint drauf zeichnen kann? Problem ist ja die übergabe der richtigen "Zeichen Fläche".
 

Evil-Devil

Top Contributor
Wie du es am Ende machst ist dir überlassen. Du könntest auch ein entsprechend großes Canvas erzeugen das in einem JScrollPane gelagert ist und dann beim speichern das Graphics Object des Canvas abrufen und entsprechend speichern.
 

morritza

Mitglied
Okey.. ich habs jetzt einiger maßen :)
Problem mit schwarzem Bild beseitig.. gab viel unnützes Zeug im Code.. ich hab versucht auf nen Icon zu malen.. *ouch*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E relevanter bereich einer isometrischen karte zeichnen (AffineTransform) Spiele- und Multimedia-Programmierung 0
SaftigMelo Kreissegment zeichnen Spiele- und Multimedia-Programmierung 2
E Buttons neu zeichnen im GridLayout Spiele- und Multimedia-Programmierung 2
A Zeichnen außerhalb der paint-Methode Spiele- und Multimedia-Programmierung 6
E Isometrische Tiles mit unterschiedlicher Größe an korrekter Position zeichnen Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
J Int Wert auf JFrame zeichnen Spiele- und Multimedia-Programmierung 3
H [ANIMATION] Hintergrundbild nur einmal zeichnen Spiele- und Multimedia-Programmierung 3
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
M Methoden eine Map zu zeichnen Spiele- und Multimedia-Programmierung 5
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
F nur Ausschnitt eines Image zeichnen Spiele- und Multimedia-Programmierung 9
T 3D Graphen Zeichnen Spiele- und Multimedia-Programmierung 19
F Kurven zeichnen Spiele- und Multimedia-Programmierung 2
E Keine Werte zum Zeichnen werden Übergeben Spiele- und Multimedia-Programmierung 3
A Halbkreise zeichnen lassen? Spiele- und Multimedia-Programmierung 2
F Lineal mit Zahlen zeichnen Spiele- und Multimedia-Programmierung 7
N Linie mit Rand zeichnen Spiele- und Multimedia-Programmierung 10
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
A Optimiertes Zeichnen - wie? Spiele- und Multimedia-Programmierung 8
data89 Koordinaten in Koordinatensystem zeichnen Spiele- und Multimedia-Programmierung 11
M Binärbaum ohne Überlappung zeichnen Spiele- und Multimedia-Programmierung 3
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
B 1)JButtons zeichnen 2)Kolisionsabfrage von zwei Objekten Spiele- und Multimedia-Programmierung 9
G Linie im Applet zeichnen Spiele- und Multimedia-Programmierung 5
G Schüsse zeichnen, Fehler? Spiele- und Multimedia-Programmierung 3
S Dreieck zeichnen Spiele- und Multimedia-Programmierung 9
G Überlagern von Strings beim zeichnen verhindern Spiele- und Multimedia-Programmierung 3
C Objekt bei Buttonklick zeichnen Spiele- und Multimedia-Programmierung 16
G Geschwungene Klammer zeichnen Spiele- und Multimedia-Programmierung 5
F Neu zeichnen verhindern Spiele- und Multimedia-Programmierung 25
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2
O Funktion zeichnen Spiele- und Multimedia-Programmierung 11
A Lissajous Figuren zeichnen Spiele- und Multimedia-Programmierung 1
G Maus springt --> Free-Hand-Zeichnen Spiele- und Multimedia-Programmierung 2
L Schüsse zeichnen Spiele- und Multimedia-Programmierung 13
M Eigene Strings zeichnen Spiele- und Multimedia-Programmierung 4
T Blitz berechnen und zeichnen Spiele- und Multimedia-Programmierung 13
M auswahlkreis zeichnen (schräg) Spiele- und Multimedia-Programmierung 4
N Logik: Grenz-/Frontlinie zeichnen Spiele- und Multimedia-Programmierung 4
G Problem beim Zeichnen von LineArrays Spiele- und Multimedia-Programmierung 9
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
G Auf 3D Box zeichnen Spiele- und Multimedia-Programmierung 4
K mit Canvas übereinander zeichnen Spiele- und Multimedia-Programmierung 4
G 3D Raum zeichnen Spiele- und Multimedia-Programmierung 7
H Kreis zeichnen mittels Schleife & drawLine Spiele- und Multimedia-Programmierung 4
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
N Bild zu zeichnen (drawImage) klappt nur manchmal?? Spiele- und Multimedia-Programmierung 8
T Effizient zeichnen Spiele- und Multimedia-Programmierung 12
H mit Java2D Markierung über JTable zeichnen und diese bewegen Spiele- und Multimedia-Programmierung 2
C Graphische Benutzerschnittstelle, Problem beim Zeichnen Spiele- und Multimedia-Programmierung 4
J schnellste alternative um in java zu "zeichnen" Spiele- und Multimedia-Programmierung 17
conan2 Objekte in richtiger Z-Reihenfolge zeichnen Spiele- und Multimedia-Programmierung 2
G Punkte in Java3D zeichnen Spiele- und Multimedia-Programmierung 2
S Pixel zeichnen Spiele- und Multimedia-Programmierung 3
S Bild in Speicherbild zeichnen = Nichts? Spiele- und Multimedia-Programmierung 3
G Farbig zeichnen ohne java.awt.Color? Spiele- und Multimedia-Programmierung 5
S Wie kann ich das Zeichnen der Grafik feiner machen? Spiele- und Multimedia-Programmierung 9
M Wie kann man Kreisringe zeichnen ? Spiele- und Multimedia-Programmierung 12
C Graphics 2D Zeichnen Spiele- und Multimedia-Programmierung 4
R Kreuz lässt sich nicht zeichnen Spiele- und Multimedia-Programmierung 11
F einzelne Polygone(Graphics) schneller als and. Fig. zeichnen Spiele- und Multimedia-Programmierung 3
K Kugeln und Zylinder zeichnen Spiele- und Multimedia-Programmierung 4
L ein Rechteck zeichnen Spiele- und Multimedia-Programmierung 6
H Mausbewegungen wie eine echte Maus in 3 dimensionalen Spielen Spiele- und Multimedia-Programmierung 12
N Schüsse in Richtung der Maus Spiele- und Multimedia-Programmierung 5
B GLFW 3D Maus- Input Spiele- und Multimedia-Programmierung 7
Arif Maus-Objekt im Player Klasse implementieren !? Spiele- und Multimedia-Programmierung 2
B Maus Cursor aus/einblenden bei Unity 3d mit .js Spiele- und Multimedia-Programmierung 1
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
S Mausklicks innerhalb eines JFrames/SWTBrowser ohne richtige Maus simulieren Spiele- und Multimedia-Programmierung 6
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
M Maus an Fedenkreuz heften Spiele- und Multimedia-Programmierung 16
M Beim schießen richtet sich die Kugel nach der Maus aus (Quaternion) Spiele- und Multimedia-Programmierung 5
D Sprite zur Maus bewegen Spiele- und Multimedia-Programmierung 9
G Zeichnung mit der Maus bewegen Spiele- und Multimedia-Programmierung 3
S Schiff in Richtung der Maus rotieren - Problem :/ Spiele- und Multimedia-Programmierung 5
S Problem bei Kartenbewegung mit Maus! Spiele- und Multimedia-Programmierung 3
M Exakte Position auf Kugel mit Maus picken , Java3d Spiele- und Multimedia-Programmierung 14
D Bilderpositionierung mit Maus Spiele- und Multimedia-Programmierung 23
T Maus-Cursor-Position manipulieren Spiele- und Multimedia-Programmierung 3
K Ein 3D-Objekt mit Maus auswählen Spiele- und Multimedia-Programmierung 5
T Problem mit Maus und Bildschirm Spiele- und Multimedia-Programmierung 3
C NavigationBehaviour mit Maus und Keyboard Spiele- und Multimedia-Programmierung 5
A Maus im Spiel-Menu oder nicht? Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben