Re: grayscale to a JPanel does not work
On 02/09/2011 09:17 AM, SamuelXiao wrote:
On Feb 10, 12:37 am, Knute Johnson<nos...@knutejohnson.com> wrote:
On 02/09/2011 07:29 AM, SamuelXiao wrote:
On Feb 9, 10:50 pm, "John B. Matthews"<nos...@nospam.invalid> wrote:
In article
<e11dadc9-4a6a-4b16-9845-c99c223cd...@h19g2000prh.googlegroups.com>,
SamuelXiao<foolsmart2...@gmail.com> wrote:
[...]
I currently paint line chart/bar chart to there (the drawing area
painting line chart/bar chart).
[...]
In addition, I have tried the example in
<http://groups.google.com/group/comp.lang.java.programmer/msg/d4c436ab...>
but it does not work as well.
This is the very code I was going to suggest; it works correctly for
me. Are you having trouble converting your chart to a BufferedImage?
I don't know how you create your chart, but org.jfree.chart.JFreeChart
includes suitable methods.
Any help would be highly appreciated.
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
Hi, the code converts an imaged to grayscale. but for my situation, I
need to converts Graphics in an applet (lines, rectangels, string) to
grayScale. The paint method in my Applet is like:
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//colorSchemeList.getSelectedIndex
switch(colorSchemeList.getSelectedIndex()){
case 0:
showGrayScale(g2d);
break;
case 1:
showHighContrast(g2d);
break;
}
}
But it does not work as the example. It just paint another rectangle
with gray color on top of those line/string/so on. Do you have any
idea for it? Thanks.
public static BufferedImage convertToGray(BufferedImage image) {
BufferedImage gray = new BufferedImage(image.getWidth(),
image.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
ColorConvertOp op = new ColorConvertOp(
image.getColorModel().getColorSpace(),
gray.getColorModel().getColorSpace(),null);
op.filter(image,gray);
return gray;
}
--
Knute Johnson
s/nospam/knute2011/
Hi, I tried the code but still the same. I first make the drawing area
in JPanel become a bufferedimage. Then calls the above function and
finally drawImage, but it will return a gray rectangle as well. Below
is the showGrayScale function.
private void showGrayScale(Graphics2D g2d){
int pre_height = 29;
// a region in JPanel become a bufferedimage.
BufferedImage img = new BufferedImage(getWidth(),
getHeight()-pre_height, BufferedImage.TYPE_INT_RGB);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
BufferedImage gray = convertToGray(img);
}
and in fact, in the paint function:
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
showLineChart(g2d);
//colorSchemeList.getSelectedIndex
switch(colorSchemeList.getSelectedIndex()){
case 0:
showGrayScale(g2d);
break;
case 1:
showHighContrast(g2d);
break;
}
}
it will first paint showLineChart(g2d) which is a function paint line
chart using drawLine and each line has different color. The Rectangle
was at the right position but doesn't grayscale those line chart. Does
I miss something here? Thanks.
You need to send us more than just pieces of code. We really need to
see an SSCCE if you want good help.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
public class GreyTest extends JPanel implements ActionListener {
private final BufferedImage color,gray;
boolean flag = true;
public GreyTest() {
setPreferredSize(new Dimension(400,300));
color = new BufferedImage(400,300,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = color.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0,0,color.getWidth(),color.getHeight());
g.setColor(Color.RED);
g.fillRect(50,50,30,250);
g.setColor(Color.BLUE);
g.fillRect(90,200,30,100);
g.setColor(Color.GREEN);
g.fillRect(140,150,30,150);
g.setColor(Color.CYAN);
g.fillRect(180,275,30,25);
g.setColor(Color.BLACK);
g.fillRect(220,250,30,50);
g.setColor(Color.MAGENTA);
g.fillRect(260,100,30,200);
gray = convertToGray(color);
}
public void actionPerformed(ActionEvent ae) {
flag = !flag;
repaint();
}
public void paintComponent(Graphics g) {
if (flag)
g.drawImage(color,0,0,null);
else
g.drawImage(gray,0,0,null);
}
static BufferedImage convertToGray(BufferedImage image) {
BufferedImage gray = new BufferedImage(image.getWidth(),
image.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
ColorConvertOp op = new ColorConvertOp(
image.getColorModel().getColorSpace(),
gray.getColorModel().getColorSpace(),null);
op.filter(image,gray);
return gray;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("Grey Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GreyTest gt = new GreyTest();
f.add(gt,BorderLayout.CENTER);
JButton b = new JButton("Color/Grey");
b.addActionListener(gt);
f.add(b,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
});
}
}
--
Knute Johnson
s/nospam/knute2011/