Hallo,
mir bereitet die Kontrasänderung eines Bildes über den JSlider einige Probleme.
Über den ChangeListener vom JSlider übergebe ich den Wert des Sliders an die Methode contrastimage(opacity)
in der nachfolgenden Methode muss das aktuelle Bild noch skaliert werden, den Fehler vermute ich an der Stelle nicht:
erst in der Methode contrast(brighterImage, opacity) passiert die Kontrastanpassung:
ich sehe keinen Fehler. Trotzdem wird das Bild während der Kontrastanpassung zwischen 1 und 0 Wert des Sliders zunehmend grau. Zwischen 1 und 2 sieht man wie sich der Kontrast korrekt verändert.
Was mache ich denn falsch? Die Basic-Beispiele verwenden meistens einen anderen Lösungsweg über den Button-Klick, wie hier (Image Processing: Brightness and Contrast : Image2D Graphics GUIJava). Der Kontrast wird mit dem Beispiel von java2s.com zwischen dem Wert 1 und 0 anderes als es bei mir. Bin um jeden Hinweis froh. Danke!
Viele Grüsse Krzysztof
mir bereitet die Kontrasänderung eines Bildes über den JSlider einige Probleme.
Über den ChangeListener vom JSlider übergebe ich den Wert des Sliders an die Methode contrastimage(opacity)
Java:
ChangeListener slchangeco = new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent event )
{
JSlider source = (JSlider)event.getSource();
float opacity = source.getValue()/10f;
image = contrastimage(opacity);
label.setIcon(new ImageIcon(image));
label.repaint();
}
};
in der nachfolgenden Methode muss das aktuelle Bild noch skaliert werden, den Fehler vermute ich an der Stelle nicht:
Java:
private Image contrastimage(float opacity)
{
actualbrightness = opacity;
BufferedImage brighterImage = new BufferedImage(unscaledimage.getWidth(null), unscaledimage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics g = brighterImage.createGraphics();
g.drawImage(unscaledimage, 0, 0, null);
g.dispose();
brighterImage = scaleimage(actualzoom,brighterImage);
return contrast(brighterImage, opacity);
}
erst in der Methode contrast(brighterImage, opacity) passiert die Kontrastanpassung:
Java:
public BufferedImage contrast(BufferedImage bi, float gamma_contrast)
{
BufferedImage buff = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_RGB);
short[] contrast = new short[256];
float temp;
for (int i = 0; i < 256; i++)
{
temp = (1.0f - gamma_contrast) * 128 + gamma_contrast * i;
contrast[i] = (short) (temp > 0.0f ? Math.min(temp, 255) : Math.max(temp, 0));
}
LookupOp op = new LookupOp(new ShortLookupTable(0, contrast), null);
op.filter(bi, buff);
return buff;
}
ich sehe keinen Fehler. Trotzdem wird das Bild während der Kontrastanpassung zwischen 1 und 0 Wert des Sliders zunehmend grau. Zwischen 1 und 2 sieht man wie sich der Kontrast korrekt verändert.
Was mache ich denn falsch? Die Basic-Beispiele verwenden meistens einen anderen Lösungsweg über den Button-Klick, wie hier (Image Processing: Brightness and Contrast : Image2D Graphics GUIJava). Der Kontrast wird mit dem Beispiel von java2s.com zwischen dem Wert 1 und 0 anderes als es bei mir. Bin um jeden Hinweis froh. Danke!
Viele Grüsse Krzysztof