Re: Sepia tone image filter for Java
On 7/15/2014 03:59, Roedy Green wrote:
On Mon, 14 Jul 2014 11:24:10 +0200, Joerg Meier <joergmmeier@arcor.de>
wrote, quoted or indirectly quoted someone who said :
Yes, that is typically what happens when you darken blue. On a computer
screen, "darken" means less of a colour ;)
Of course. I was thinking in terms of paint, where adding more blue
paint would be "darkening" the blue.
A sepia tone filter is trickier than I thought. I need to compare the
results from this code with the sepia filter in JavaFX.
import java.awt.*;
import java.awt.color.*;
import java.awt.image.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.*;
public class test0 extends JPanel {
private BufferedImage orig,sepia;
public test0() {
try {
URL url = new URL(
"http://rabbitbrush.frazmtn.com/xlsjacksonhole.jpg");
orig = ImageIO.read(url);
setPreferredSize(new
Dimension(orig.getWidth(),orig.getHeight()*2));
// convert to grayscale and back to RGB
ColorSpace imgCS = orig.getColorModel().getColorSpace();
ColorSpace grayCS = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp cop = new ColorConvertOp(imgCS,grayCS,null);
sepia = cop.filter(orig,null);
cop = new ColorConvertOp(grayCS,imgCS,null);
sepia = cop.filter(sepia,null);
// slightly enhance the red, slightly reduce the green and
// remove half the blue
float[] factor = new float[] { 1.1f,.9f,.5f };
float[] offset = new float[] { 0f,0f,0f };
RescaleOp rop = new RescaleOp(factor,offset,null);
sepia = rop.filter(sepia,null);
} catch (Exception e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g2d) {
g2d.drawImage(orig,0,0,null);
g2d.drawImage(sepia,0,sepia.getHeight(),null);
}
public static void main(String... args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("test0");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.add(new test0(),BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
});
}
}
--
Knute Johnson