Images kolorieren und einfaden

Status
Nicht offen für weitere Antworten.
C

Chuck

Gast
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

Top Contributor
Du könntest zum Einfaden ein AlphaComposite verwenden, und den alpha-Wert immer weiter erhöhen. Ich hab sowas schonmal gemacht, Codeausschnitt:
Code:
	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:
Code:
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());
      }
    }
  }
 
C

Chuck

Gast
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

Top Contributor
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
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben