Grafik einfärben mittels Color Picker (SWING)

S

sitave

HILFE!:(

brauche dringend Hilfe von jemandem der sich in JAVA auskennt
Ich soll mit Netbeans 3.6 und SWING-Komponenten eine Anwendung erstellen:

Mit dem Color-Picker soll der Anwender die Möglichkeit haben eine Farbe auszuwählen. Wenn er sich eine ausgesucht hat drückt er auf OK und eine Grafik (Auto) färbt sich in seiner gewählten Farbe..
Alternativ kann der Anwender die Farbe durch Mischen von RGB selbst erzeugen.

Kann mir irgendjemand helfen?

viele Grüße
 
Hallo!

Schau mal hier:
Code:
/*
 * Created on 29.12.2004@16:16:52
 *
 * TODO Licence info
 */
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.Transparency;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * @author Administrator
 * 
 * TODO Explain what I do...
 */
public class JColorChooserExample extends JFrame {

	private JButton btnColor;

	private JLabel lblImage, lblColorReplacement, lblColor;

	private BufferedImage bufImg;

	private int w, h;

	private int replaceColorRGB = -1;

	public JColorChooserExample() {
		super("JColorChooserExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		btnColor = new JButton("Choose a color");
		btnColor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Color c = JColorChooser.showDialog(JColorChooserExample.this,
						"Choose your color", Color.WHITE);
				System.out.println(c);
				if (replaceColorRGB == -1)
					return;

				int colorRGB = c.getRGB();

				for (int x = 0; x < w; x++) {
					for (int y = 0; y < h; y++) {
						int rgb = bufImg.getRGB(x, y);
						if (rgb == replaceColorRGB) {
							bufImg.setRGB(x, y, colorRGB);
						}
					}
				}
			}
		});

		try {
			BufferedImage bImg = ImageIO.read(new File("c:/test.jpg"));
			w = bImg.getWidth();
			h = bImg.getHeight();

			//Kleiner Trick um ein Hardware Beschleunigtes BufferedImage zu bekommen...
			bufImg = GraphicsEnvironment.getLocalGraphicsEnvironment()
					.getDefaultScreenDevice().getDefaultConfiguration()
					.createCompatibleImage(w, h, Transparency.BITMASK);

			bufImg.getGraphics().drawImage(bImg, 0, 0,
					JColorChooserExample.this);

		} catch (IOException e1) {
			e1.printStackTrace();
		}

		lblImage = new JLabel(new ImageIcon(bufImg));

		lblImage.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent evt) {
				Point p = evt.getPoint();
				replaceColorRGB = bufImg.getRGB(p.x, p.y);
				Color c = new Color(replaceColorRGB);
				lblColor.setForeground(c);
			}
		});

		lblColorReplacement = new JLabel("Replace color:");
		lblColor = new JLabel("COLOR");
		// lblColor.setPreferredSize(new Dimension(45, 45));

		JPanel panel = new JPanel();
		panel.add(lblColorReplacement, BorderLayout.WEST);
		panel.add(lblColor, BorderLayout.EAST);

		add(lblImage, BorderLayout.NORTH);
		add(panel, BorderLayout.CENTER);
		add(btnColor, BorderLayout.SOUTH);

		pack();
		setVisible(true);
	}

	public static void main(String[] args) {
		new JColorChooserExample();
	}
}

1) Pixel auf Bild selektieren.
2) Farbe aussuchen
...warten...

Das doofe an der Sache ist nur,dass nur genau die Pixel durch die neue Farbe ausgetauscht werden die der alten Farbe GENAU entsprechen... das sieht natürlich bei Fotos manchmal ziemlich bescheiden aus... aber vielleicht fällt dir ja dazu noch weis ein.

Gruß Tom
 

Anhänge

  • colorChooserExample.jpg
    colorChooserExample.jpg
    38 KB · Aufrufe: 81

Neue Beiträge

Zurück