ViniGodoy:
E o que ele está desenhando?
PS: É melhor fazer o g2d.dispose() antes de fazer o draw. Troque a linha 09 com a 10 de lugar.
Cara, agora deu certo! Quero dizer, quase…todos os pixels estão vindo como se estivessem com a cor preta…Mas eu coloquei o fundo do panel para branco(talvez o erro seja aqui. Ainda estou olhando). Deixa eu colocar o código todo, daí explico.
public class DrawLetter extends JPanel implements MouseMotionListener, MouseListener {
private static final long serialVersionUID = 1L;
public int x = -10;
public int y = -10;
public static int width;
public static int height;
BufferedImage bI;
Graphics2D g2d;
public static DrawLetter panel;
public DrawLetter() {
addMouseMotionListener(this);
addMouseListener(this);
setBackground(Color.white);
}
@Override
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
System.out.println("Mouse clicked at position X = " + x + " Y = " + y);
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void paintComponent(Graphics g) {
//super.paintComponent(g);
bI = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
g2d = (Graphics2D)bI.createGraphics(); //Desenha sobre a imagem
g2d.setColor(Color.black);
g2d.fillOval(x,y,4,4);
g2d.dispose();
g.drawImage(bI, 0, 0, null); //Desenha sobre o jpanel
}
public void printPanel() {
for(int l = 0; l < width; l++) {
for(int c = 0; c < height; c++) {
int pixelClicked = bI.getRGB(l, c);
int red = (pixelClicked & 0x00FF0000) >> 16;
int green = (pixelClicked & 0x0000FF00) >> 8;
int blue = pixelClicked & 0x000000FF;
Color colorPixelClicked = new Color(red, green, blue);
Color colorBlack = new Color(0, 0, 0);
if (colorPixelClicked.equals(colorBlack)) {
System.out.println("DEBUG - " + l + " and Y = " + c + " Color = " + pixelClicked);
}
}
}
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("My Window");
JButton button = new JButton("Get Pixel Clicked");
panel = new DrawLetter();
frame.getContentPane().setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(500, 300));
frame.getContentPane().setBackground(Color.white);
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
width = panel.getWidth();
height = panel.getHeight();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent a) {
panel.printPanel();
}
});
}
}
Na verdade vou fazer um OCR. Vou desenhar uma letra, varrer a tela e identificar a forma da letra pela mudança de cor dos pixels. Ou seja, o fundo está branco e depois que desenhar os pequenos cículos(fillOval()), vou buscar onde houve mudança de cor(BufferedImage.getRGB()) - onde está preto(que foi a cor que deixei para os pixels que serão pintados). Posso ter problemas, pois tenho que ver a questão de transparência…mas de qualquer forma estou tendo um erro, pois TODOS os pixels estão sendo indentificados como pretos…É alguma coisa com o BufferedImage que estou deixando passar batido…Se alguém souber…mas estou pesquisando…se conseguir, deixo a solução aqui!