# Images kolorieren und einfaden



## Chuck (12. Dez 2004)

Hallo,

ich möchte gerne Images (jpgs) _kolorieren _und _einfaden_. Dafür suche ich geeignete Methoden.

Das _Einfaden _würde ich über die Helligkeit regeln. Mit minimaler Helligkeit beginnen und dann bis zur Normalhelligkeit das Bild immer wieder neu zeichnen. 

Zum _Kolorieren _muss ich vielleicht noch kurz beschreiben, was ich damit meine. (In Paint Shop Pro 6 findet man die Funktion, die ich meine, unter Farben/Kolorieren...) Man kann damit ein farbiges Bild in einem einzigen Farbton darstellen, bspw. in einem Blauen. Die Farbpalette geht dann von Schwarz - Dunkelblau - Hellblau bis Weiß).

Für beides habe ich keine Methoden gefunden. Zumindest für Helligkeit müsste es da doch was geben, oder?

Viele Grüße
Chuck


----------



## Illuvatar (12. Dez 2004)

Du könntest zum Einfaden ein AlphaComposite verwenden, und den alpha-Wert immer weiter erhöhen. Ich hab sowas schonmal gemacht, Codeausschnitt:

```
public Splashscreen (Image img, short alpha, long inFade, String title)
	{
		super (title);
		this.alpha = alpha;
		this.img = img;
		// [...]
		createBufferStrategy(2);
		strategy = getBufferStrategy();
		setIgnoreRepaint (false);
		if (inFade > 0){
			setIgnoreRepaint (true);
			long start = System.currentTimeMillis();
			long now;
			loop: while (true){
				now = System.currentTimeMillis();
				if ((now - start) >= inFade){
					break loop;
				}
				this.alpha = (short)((((double)(now - start)) / inFade) * alpha);
				paint (getGraphics());
				Util.sleep(7); // Performance
			}
			this.alpha = alpha;
			setIgnoreRepaint (false);
			repaint();
		}
	}
	// [...]
	/**
     *Die Methode wird zum Zeichnen des Fensters verwendet.
     */
	public void paint (Graphics gr)
	{
		Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
		g.clearRect (rect.x, rect.y, rect.width, rect.height);
		g.setComposite (AlphaComposite.getInstance(
			AlphaComposite.SRC_OVER, alpha / 255.0F));
		g.drawImage (img, 0, 0, this);
		// [...]
		g.dispose();
		strategy.show();
	}
```

Zum Kolorieren: Die Funktion im PSP is ja nett, die kannte ich gar net 
Ich denk net, dass es sowas vorgefertigt gibt, vielleicht kannst du ja durch die Pixel des Bildes gehen, und sämtliche anderen Bestandteile null setzen bzw. reduzieren, das hab ich grad mal zusammengehackt:

```
public void colImg (double itensity) throws Exception
  {
    for (int i = 0; i < img.getHeight(); i++){
      for (int j = 0; j < img.getWidth(); j++){
        Color c = new Color (img.getRGB(j, i));
        Color c2 = new Color ((int)(c.getRed() * itensity), (int)(c.getGreen() * itensity), c.getBlue());
        img.setRGB(j, i, c2.getRGB());
      }
    }
  }
```


----------



## Chuck (12. Dez 2004)

Hallo Illuvatar,

danke für den Tipp! Der AlphaComposite ist zwar nicht speziell für die Helligkeit (sondern für Transparenz), aber es funktioniert. 

Gibt es tatsächlich keine Methode um wirklich die Helligkeit eines Bildes zu bestimmen?

Wegen dem Kolorieren habe ich eine Idee, muss es aber noch ausprobieren und schauen, ob es dafür die Methoden gibt, die ich brauche:
1. Bild konvertieren in Grauwerte
2. LookupTable verändern.

Viele Grüße
Chuck


----------



## Illuvatar (12. Dez 2004)

1. Du kannst für jeden Pixel Color.RGBtoHSB verwenden, da steht B für Brightness, ich weiß nicht, ob dir das was bringt.
2.1. Schau mal in der jfc/Java2D Demo unter "Colors", da wird sowas gemacht, der Source ist da ja dabei. Wenn du weißt, wie es geht, schreibs doch mal, interessiert mich auch.
2.2. Weiß ich auch net


----------

