ola gostaria de carregar uma imagem de um arquivo para um panel… porem não posso usar a rotina pronta do java para fazer isto ImageIO.read retornado um BufferedImage e passando para o g.drawImage… ou seja tenho que fazer isto na unha… sem usar nada dessas apis… no maximo do maximo a classe File… como posso fazer isto alguem tem alguma ideia?
Carregar imagem de arquivo para um panel
8 Respostas
- Procure a documentação do formato de imagem que você quer usar.
- Abra o arquivo, usando um InputStream qualquer e analise os dados.
- Você será obrigado a usar o método Graphics pelo menos para pintar os pontos da imagem na tela.
mas pegando o InputStream como faço para pegar suas informações para pinta-la com o Graphics?
Como disse o ViniGodoy.
Só tem um jeito de se fazer isto, assim:
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class PanelMain extends JPanel {
public PanelMain() {
super();
setLayout(null);
}
public void paintComponent(Graphics g){
Image img = new ImageIcon(getClass().getResource("/images/bandeira1.jpg")).getImage();
super.paintComponent(g);
int x = 0;
int y = 0;
g.drawImage(img, x, y,this);
}
}
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
public class TestMain extends JFrame {
private final PanelMain panelMain = new PanelMain();
public TestMain() {
super();
setMinimumSize(new Dimension(700, 500));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(panelMain);
}
//daqui para baixo é para você testar o form
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestMain frame = new TestMain();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Acho que ele quer pintar na unha, sem o ImageIcon.
No caso de um BMP, você teria que decodificar o cabeçalho e depois ler os valores RGB presentes em cada pixel. Com isso vc gera um color e pinta um ponto na posição do pixel:
O BMP é um formato bastante direto. 3 bytes de cor são gravados lado-a-lado. E os pixels são gravados em sequencia. Não há compactação.
Se você lidar com jpeg, gif, ou png, terá que lidar com a compactação. Nesse caso, além do cabeçalho, terá que buscar pelo algoritmo que faz isso. É um processo um pouco mais complexo.
O modelo jpeg suporta várias informações no arquivo como o exif. A melhor maneira de lidar com imagens digitais é saber como funcionam os formatos, e estudar a sua parte matemática.
Aqui o datasheet do formato jpeg.
O BMP é o mais simples, pois não há nenhuma estrutura complexa por detráz dele. Apenas sequências de bytes.
Acho que ele quer pintar na unha, sem o ImageIcon.No caso de um BMP, você teria que decodificar o cabeçalho e depois ler os valores RGB presentes em cada pixel. Com isso vc gera um color e pinta um ponto na posição do pixel:
O BMP é um formato bastante direto. 3 bytes de cor são gravados lado-a-lado. E os pixels são gravados em sequencia. Não há compactação.
Se você lidar com jpeg, gif, ou png, terá que lidar com a compactação. Nesse caso, além do cabeçalho, terá que buscar pelo algoritmo que faz isso. É um processo um pouco mais complexo.
Exatamente… como o Vinni disse eu quero pintar na unha…

Deixando de brincadeiras:
Vai ser bem lento; acho que é melhor você ler sobre os algoritmos e entendê-los, em vez de fazer as coisas “no braço”.
Até porque boa parte dos algoritmos nem em Java é implementado, mas sim em C com algumas partes em assembly.
sim eu percebi… usam jni na api da sun… até ai sem problemas faço a coisa em C depois só chamo ele no java…
mas o que eu preciso e saber como fazer…