// This code example is created for educational purpose
// by Thorsten Thormaehlen (contact: www.thormae.de).
// It is distributed without any warranty.
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

class MyBufferedImage extends JFrame {
  public void createGUI() {
    // configure JFrame
    setTitle("HelloGUI");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // create and add JPanel
    MyPaintPanel paintPanel = new MyPaintPanel();
    this.getContentPane().add(paintPanel);

    pack();
    setResizable(false);
    setVisible(true);
  }

  public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(
        new Runnable() {
          public void run() {
            MyBufferedImage myGUI = new MyBufferedImage();
            myGUI.createGUI();
          }
        });
  }

  static class MyPaintPanel extends JPanel {
    private BufferedImage img = null;

    public MyPaintPanel() {
      try {
        img = ImageIO.read(new File("horse.jpg"));
      } catch (IOException e) {
        System.out.println("failed to load image");
      }
      if (img != null) this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));

    }

    @Override
    public void paint(Graphics g) {
      super.paint(g);
      Graphics2D g2d = (Graphics2D) g; // cast to Graphics2D

      int oldRgb = img.getRGB(10, 100); // read a pixel
      int rgb = 0xFFFF0000; // Alpha-Red-Green-Blue
      img.setRGB(10, 100, rgb); // draw red pixel
      g.drawImage(img, 0, 0, null);
    }
  }
}
