Farbsystem

Vasquez

Grünschnabel
Hallo!

Kennt sich jemand mit dem Farbsystem in Java aus? Soviel ich glaube zu wissen basiert es auf dem RGB System von 0 bis 255.
Ich habe jetzt Werte, die eine gewisse Spannweite betreffen. Ich moechte diese Werte dem System entsprechend zuordnen, d.h wenn z.B 100 das Maximum ist, soll dieser Wert am Ende der Farbskala liegen. Ist 0 der kleinste, so liegt er am Anfang usw.

Ziel ist es, Pixeln, die veschiedene Werte zugewiesen bekommen, einen Farbwert dieser Skala zuzuordnen!
Hoffe mir kann jemand helfen!

MfG
Thomas
 
Hallo!

Meinst du sowas?

Code:
import java.awt.AWTException;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Robot;

import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/*
 * ColorScale.java
 *
 * Created on 11. März 2004, 13:52
 */

/**
 *
 * @author  Darimont
 */
public class ColorScale extends javax.swing.JFrame {

	private Color color;

	/** Creates new form ColorScale */
	public ColorScale() {
		initComponents();
		setVisible(true);
	}

	/**
	 * @param image
	 */

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	private void initComponents() {
		java.awt.GridBagConstraints gridBagConstraints;

		paneBase = new javax.swing.JPanel();
		paneControls = new javax.swing.JPanel();
		lblSlide = new javax.swing.JLabel();
		jSlider1 = new javax.swing.JSlider();
		paneMiniPict = new javax.swing.JPanel();
		panGradient = new GradientPanel();

		getContentPane().setLayout(new java.awt.FlowLayout());

		setTitle("Color Scale");
		addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowClosing(java.awt.event.WindowEvent evt) {
				exitForm(evt);
			}
		});

		jSlider1.addChangeListener(new ChangeListener() {

			public void stateChanged(ChangeEvent e) {
				// TODO Auto-generated method stub
				int val = jSlider1.getValue();
				try {
					Robot robot = new Robot();
					System.out.println(val * 2.5);
					Point p = getLocation();
					color = robot.getPixelColor((int)(val * 2.5)+p.x,70+p.y);
					System.out.println("Color: " + color);
				} catch (AWTException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

				Graphics2D g2d = (Graphics2D) paneMiniPict.getGraphics();
				g2d.setColor(color);
				g2d.fillRect(0, 0, 16, 16);

			}

		});

		paneBase.setLayout(new java.awt.GridBagLayout());

		paneBase.setBackground(new java.awt.Color(51, 153, 255));
		paneBase.setMinimumSize(new java.awt.Dimension(320, 240));
		paneBase.setPreferredSize(new java.awt.Dimension(320, 240));
		paneControls.setLayout(new java.awt.GridBagLayout());

		paneControls.setBackground(new java.awt.Color(255, 153, 0));
		paneControls.setMinimumSize(new java.awt.Dimension(320, 100));
		paneControls.setPreferredSize(new java.awt.Dimension(320, 100));
		lblSlide.setText("Scale: ");
		gridBagConstraints = new java.awt.GridBagConstraints();
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 0;
		paneControls.add(lblSlide, gridBagConstraints);

		gridBagConstraints = new java.awt.GridBagConstraints();
		gridBagConstraints.gridx = 2;
		gridBagConstraints.gridy = 0;
		paneControls.add(jSlider1, gridBagConstraints);

		paneMiniPict.setBorder(
			new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
		paneMiniPict.setMinimumSize(new java.awt.Dimension(16, 16));
		paneMiniPict.setPreferredSize(new java.awt.Dimension(16, 16));
		gridBagConstraints = new java.awt.GridBagConstraints();
		gridBagConstraints.gridx = 1;
		gridBagConstraints.gridy = 0;
		paneControls.add(paneMiniPict, gridBagConstraints);

		gridBagConstraints = new java.awt.GridBagConstraints();
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 1;
		paneBase.add(paneControls, gridBagConstraints);

		panGradient.setBackground(new java.awt.Color(255, 255, 204));
		panGradient.setMinimumSize(new java.awt.Dimension(320, 140));
		panGradient.setPreferredSize(new java.awt.Dimension(320, 140));
		gridBagConstraints = new java.awt.GridBagConstraints();
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 0;
		paneBase.add(panGradient, gridBagConstraints);

		getContentPane().add(paneBase);

		pack();
	}

	/** Exit the Application */
	private void exitForm(java.awt.event.WindowEvent evt) {
		System.exit(0);
	}

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		new ColorScale();
	}

	// Variables declaration - do not modify
	private javax.swing.JLabel lblSlide;
	private javax.swing.JPanel paneBase;
	private javax.swing.JPanel paneControls;
	private javax.swing.JPanel panGradient;
	private javax.swing.JPanel paneMiniPict;
	private javax.swing.JSlider jSlider1;
	// End of variables declaration

	class GradientPanel extends JPanel {

		private int width;
		private int height;

		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			width = getWidth();
			height = getHeight();
			Graphics2D g2d = (Graphics2D) g;
			g2d.setPaint(
				new GradientPaint(0, 0, Color.BLUE, width, height, Color.RED));
			g2d.fillRect(0, 0, width, height);
		}

	}

}

Gruß Tom
 

Anhänge

  • bild5.png
    bild5.png
    6 KB · Aufrufe: 65
Jau... des hat mir schonmal geholfen.. kannst du mir sagen, wo ich nachschlagen kann, wie das Farbsystem funktioniert? Ich muss naemlich ne Umrechnung von der mir gegebenen Skala auf die einzelnen Farben finden... das geht nur, wenn ich genau weiss, wie sich die Farben aus den 3 interger Werten zusammen setzen!

Danke!

Thomas
 
Hallo!

Vielleicht hiflt dir das weiter ...

Code:
	/** Statische Hilfsmethode zum Berechnen von Farbwerten
	  * aus Primaerfarbenanteilen.
	  * @param r Anteil des Rotkanals im Bereich 0 = min ... 255 = max.
	  * @param g Anteil des Gruenkanals im Bereich 0 = min ... 255 = max.
	  * @param b Anteil des Blaukanals im Bereich 0 = min ... 255 = max.
	  * @return Farbwert.
	  */
	public final static int color(int r, int g, int b)
	{
		return 0xFF000000 | (clamp(r) << 16) | (clamp(g) << 8) | clamp(b);
	}

	/** Begrenzt das Argument auf den Wertebereich [0...255].
	  * @param x Beliebiger Wert.
	  * @return 0 fuer negative x, 255 fuer x ueber 255, x unveraendert ansonsten.
	  */
	private final static int clamp(int x)
	{
		return x < 0?  0:  x > 255?  255:  x;
	}

Gruß Tom
 
Zurück