# Brightness eines Bildes [DRINGEND]



## thomet (3. Aug 2008)

Hy,
ich habe eine Bild über einen OpenFileDialog eingelesen und übergebe es meiner Classe als ImageData.

Hier erstma der Quellcode:


```
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;

public class brightness {

	/**
	 * Funktion um die Helligkeit eines Bildes zu verändern
	 * @param imgData ImageData des Bildes
	 * @param bright Helligkeit für das Bild
	 * @return Image mit der übergebenen Helligkeit
	 */
	public Image setBrightness(ImageData imgData, int bright) {

		Image im = null;
		if (!(imgData == null)) {
			// Breites des Bildes
			int width = imgData.width;
			// Höhe des Bildes
			int height = imgData.height;
			// PaletteData vom Bild
			PaletteData palette = imgData.palette;
			// Neues RGB Array
			RGB [] newRGBs = new RGB[width*height];

			int i=0;
			for (int y=0;y<height;y++) {
				for (int x=0;x<width;x++) {
					// Pixel auslesen
					int pixel = imgData.getPixel(x, y);
					// RGB Werte des Pixel auslesen
					RGB rgb = palette.getRGB(pixel);
					// RGB zu Color convertieren
					Color c =  new Color(Display.getDefault(), rgb);
					// Brightness setzen
					c = setColorBrigh(c,bright);
					// Neues RGB Array bauen
					newRGBs[i] = new RGB(c.getRed(),c.getGreen(),c.getBlue());
					i++;					
				}
			}

                        // Neue RGBs der Palette übergeben
			palette.colors = newRGBs;
                        // Neue ImageData mit neuer Palette erstellen
			ImageData newImgData = new ImageData(width, height, 8, palette);
                        // Image aus ImageData erstellen
			im = new Image(null, newImgData);
		}
		
		return im;
	}

	/**
	 * Setzt die Helligkeit einer Farbe (Color)
	 * @param c Color
	 * @param value Helligkeitswert
	 * @return Color mit neuen Helligkeitswert
	 */
	private Color setColorBrigh(Color c, float value) {
                // RGB werte aus Color auslesen
		RGB rgb = c.getRGB();
                // RGB zu HSB convertieren
		float[] fs = java.awt.Color.RGBtoHSB(rgb.red, rgb.green, rgb.blue, null);
                // neue Color erstellen mit veränderten Brightness
		java.awt.Color cc = new java.awt.Color(java.awt.Color.HSBtoRGB(fs[0], fs[1], value));
                // Rückgabe der neuen Color
		return new Color(Display.getDefault(), cc.getRed(), cc.getGreen(), cc.getBlue());
	}
	
}
```

Ich will die Brightness änder, doch irgendwie bekomme ich immer ein Schwarzes Bild.

Es ist dringt, ich bitte um eure Hilfe.

Danke schonma im vorraus.

MfG thomet


----------



## Gast (4. Aug 2008)

Hier wird das RGB-Farbsystem nur im Hintergrund gebraucht...

Für Brightness musst du ein anderes System nutzen:
http://de.wikipedia.org/wiki/HSV-Farbraum

Man kann natürlich dann noch über die Systeme hin und her rechnen...


----------



## thomet (7. Aug 2008)

Hier meine lösung:


```
package kapelan_aufgabe.imagetools;

import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.RGB;

/**
 * 
 * @author Thomet
 *
 */
public class brightness {
	
	/**
	 * Funktion um die Helligkeit eines Bildes zu verändern
	 * @param imgData ImageData des Bildes
	 * @param bright Helligkeit für das Bild
	 * @return Image mit der übergebenen Helligkeit
	 */
	public Image setBrightness(ImageData imgData, float bright) {
		
		// Kopie von imgData
		ImageData newImgData = (ImageData) imgData.clone();
		// Brightnesswert zwischen 0 und 1
		bright = (bright-100) / 100;
		// Neues Image
		Image img = null;

		if (!(imgData == null)) {		
			// Höhe des Bildes
			int height = imgData.height;
			// Breite des Bildes
			int width = imgData.width;
			// PaletteData das Bildes
			PaletteData palette = imgData.palette;
			
			for (int y=0;y<height;y++) {
				for (int x=0;x<width;x++) {
					// Pixel auslesen
					int pixel = imgData.getPixel(x, y);
					// RGB wert des Pixels
					RGB rgb = palette.getRGB(pixel);
					// RGB -> HSB
					float[] hsb = rgb.getHSB();
					// Hue
					float hue = hsb[0];
					// Saturation
					float satu = hsb[1];
					// Brightness + bright
					float brigh = hsb[2] + bright;
					// brigh nur zwischen 0 und 1
					if (brigh > 1) brigh = 1;
					if (brigh < 0) brigh = 0;
					// Neuer RGB Wert aus den HSB Werten
					RGB newRGB = new RGB(hue, satu, brigh);
					// PixelValue aus neuen RGB-Wert
					pixel = palette.getPixel(newRGB);
					// neue PixelValue setzen
					newImgData.setPixel(x, y, pixel);
				}
			}
			// Neues Image erstellen
			img = new Image(null, newImgData);
		}
		return img;
	}
}
```


----------

