Io ne ho detti 4 di aspetti.
Che intendi con "raster"? Nel senso generale di "immagine raster" che consiste in una griglia di pixel (concetto contrapposto alle immagini "vettoriali")?
O intendi proprio java.awt.image.Raster? Un Raster è solo la rappresentazione di un'area rettangolare di pixel e che contiene un DataBuffer con i pixel in un determinato formato. Raster è solo una struttura dati interna, non è una immagine come intesa dal framework.
Le immagini in Java (perlomeno in Java SE) sono rappresentate da java.awt.Image e sotto-tipi.
Se vuoi solo far vedere una immagine, il modo più semplice è:
- creare un ImageIcon, direttamente (da file/URL) o da un Image già esistente.
- assegnare il ImageIcon ad un JLabel.
- inserire JLabel in un contenitore: il content pane di JFrame, un JPanel specifico, ecc....
Non servirebbe di certo il custom painting solo per questo.
Questo è appunto il primo aspetto che dicevo "il caricamento di una immagine da file/stream/risorsa nei formati standard es. gif/jpeg/png".
Se usi JFileChooser (da un classico menù File->Apri) per far scegliere un file immagine, JFileChooser ti fornisce solo il pathname del file e basta, non "apre" o carica un bel niente.
Come usare il pathname spetta a te. Se è una immagine, allora può essere caricata tramite diverse API del framework per ottenere un Image o BufferedImage (a seconda della classe/metodo usato).
C'è il toolkit di AWT (java.awt.Toolkit), c'è la API ImageIO (javax.imageio.ImageIO) e c'è javax.swing.ImageIcon che è la principale implementazione di Icon.