Uma imagem digital é a representação de uma imagem bidimensional usando números binários codificados de modo a permitir seu armazenamento, transferência, impressão ou reprodução, e seu processamento por meios eletrônicos. Há dois tipos fundamentais de imagem digital. Uma é do tipo rastreio (raster) e outra do tipo vetorial. Uma imagem digital do tipo raster, ou bitmap, ou ainda matricial, é aquela que em algum momento apresenta uma correspondência bit-a-bit entre os pontos da imagem raster e os pontos da imagem reproduzida na tela de um monitor.
A imagem vetorial não é reproduzida necessariamente por aproximação de pontos, antes era destinada a ser reproduzida por plotters de traços que reproduziam a imagem por deslocamento de canetas-tinteiro.
Tipicamente, as imagens raster são imagens fotográficas, e as imagens vetoriais são desenhos técnicos de engenharia. Os quadrinhos ilustrados se assemelham em qualidade a imagens raster, mas são impressos em plotters que passaram a imprimir à maneira das impressoras comuns por jato de tinta.
BufferedImage
A subclasse BufferedImage descreve uma imagem com um buffer de acesso de dados de imagem. A BufferedImage é composto de um modelo de cor e um Raster de dados de imagem.
ImageIcon
Uma implementação da interface do ícone que pinta ícones de imagens. Imagens que são criados a partir de uma URL, nome de um arquivo ou da matriz de bytes que são pré-carregados usando o MediaTracker para monitorar o estado de carga da imagem.
ImageIO
Uma classe que contém métodos de conveniência estáticos para localizar os leitores de imagem e gravadores de imagem, e realizar a codificação e decodificação simples.
Url
A classe URL representa um Uniform Resource Locator, um ponteiro para um “recurso” na World Wide Web. Um recurso pode ser algo tão simples como um arquivo ou um diretório, ou pode ser uma referência a um objeto mais complexo, como uma consulta a um banco de dados ou a um motor de busca.
Exemplo:
Neste exemplo carregamos uma imagem cujo sua fonte é uma Url da internet e a exibimos em um componente de rótulos.
Java
import java.awt.Component; import java.awt.Container; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Imagem { // Declara componentes JLabel rotulo; JLabel figura; BufferedImage imagem; URL url; public Container criaPainel() { // Cria painel JPanel painel = new JPanel(); // Cria layout painel.setLayout(new BoxLayout(painel, BoxLayout.PAGE_AXIS)); painel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); // Cria componentes rotulo = new JLabel("Imagem - Picture"); // Tenta abrir uma imagem de uma url try { url = new URL("https://desenvolvimentoaberto.files.wordpress.com/2014/04/images.jpg"); imagem = ImageIO.read(url); } catch ( IOException e) { e.printStackTrace(); } // Cria uma figura e a exibe em um JLabel ImageIcon fig = new ImageIcon(imagem); figura = new JLabel(fig); // Alinha componentes rotulo.setAlignmentX(Component.CENTER_ALIGNMENT); figura.setAlignmentX(Component.CENTER_ALIGNMENT); // Adiciona componentes ao painel painel.add(rotulo); painel.add(Box.createVerticalStrut(10)); painel.add(figura); return painel; } // Cria GUI public static void criaGUI() { // Cria formulario JFrame formulario = new JFrame("DA - Image"); formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // cria nova instancia da classe Imagem pic = new Imagem(); // Adiciona painel ao formulario formulario.setContentPane(pic.criaPainel()); // Adiciona tamanho do formulario formulario.setSize(300,290); // Exibe formulario formulario.setVisible(true); } public static void main(String[] args) { // Thread do swing javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { // Mostra Gui criaGUI(); } }); } }
Como faço para limpar um BufferedImage ?
Realmente o BufferdImage ocupa muita memoria você pode limpar usando a seguinte instrução:
BufferedImage imagem;
imagem.createGraphics().clearRect(0, 0, largura, altura);