Hola la clase BufferedImage se usa para mantener una representación de una imagen en memoria dentro de una aplicación Java, de modo que la puedes modificar o guardar en cualquiera de los formatos estándar propios de imágenes.
Para pasar como parámetro una BufferedImage antes habrás tenido que crearla con un constructor (igual que haces con cualquier otra clase, por ejemplo un ArrayList antes de pasarlo como parámetro tienes que haberlo creado), por ejemplo
import java.awt.image.BufferedImage;
...
BufferedImage img = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
Esto crea una imagen de 256x256 píxeles sin transparencia. Todavía faltaría "dibujar la imagen", es decir, asignarle valores a sus píxeles, de modo que después puede ser guardada. Para asignar valores a los píxeles se puede hacer a bajo nivel, que sería establecer valores directamente con los métodos setRGB() ó a alto nivel basándonos en definir formas geométricas, una imagen de partida, etc.
Ejemplo de uso:
private void loadData(){
if (!this.file.exists()) {
throw new RuntimeException("Skinfile '" + this.file.getName() + "' does not exist!");
}
try {
BufferedImage img=ImageIO.read(this.file);
this.width=img.getWidth();
this.height=img.getHeight();
this.pixelData=new Color[this.width][this.height];
this.blockTypes=new ColorBlock[this.width][this.height];
for (int x=0; x < this.width; x++) {
for (int y=0; y < this.height; y++) {
this.pixelData[x][this.height - y - 1]=new Color(img.getRGB(x,y));
}
}
this.loaded=true;
}
catch ( Exception e) {
e.printStackTrace();
}
}
Un ejemplo más completo donde se crea un BufferedImage a partir de una imagen en formato png. En este código tienes que cambiar la línea String imageURL = "image.png"; para poner la ruta de la imagen que quieras utilizar
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
public class ImageToBufferedImage {
static BufferedImage image;
static boolean imageLoaded = false;
public static void main(String[] args) {
// The ImageObserver implementation to observe loading of the image
ImageObserver myImageObserver = new ImageObserver() {
public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) {
if ((flags & ALLBITS) != 0) {
imageLoaded = true;
System.out.println("Image loading finished!");
return false;
}
return true;
}
};
// The image URL - change to where your image file is located!
String imageURL = "image.png";
/**
* This call returns immediately and pixels are loaded in the background
* We use an ImageObserver to be notified when the loading of the image
* is complete
*/
Image sourceImage = Toolkit.getDefaultToolkit().getImage(imageURL);
sourceImage.getWidth(myImageObserver);
// We wait until the image is fully loaded
while (!imageLoaded) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
// Create a buffered image from the source image with a format that's compatible with the screen
GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice graphicsDevice = graphicsEnvironment.getDefaultScreenDevice();
GraphicsConfiguration graphicsConfiguration = graphicsDevice.getDefaultConfiguration();
// If the source image has no alpha info use Transparency.OPAQUE instead
image = graphicsConfiguration.createCompatibleImage(sourceImage.getWidth(null), sourceImage.getHeight(null), Transparency.BITMASK);
// Copy image to buffered image
Graphics graphics = image.createGraphics();
// Paint the image onto the buffered image
graphics.drawImage(sourceImage, 0, 0, null);
graphics.dispose();
// Create frame with specific title
Frame frame = new Frame("Example Frame");
// Add a component with a custom paint method
frame.add(new CustomPaintComponent());
// Display the frame
int frameWidth = 300;
int frameHeight = 300;
frame.setSize(frameWidth, frameHeight);
frame.setVisible(true);
}
/**
* To draw on the screen, it is first necessary to subclass a Component and
* override its paint() method. The paint() method is automatically called
* by the windowing system whenever component's area needs to be repainted.
*/
static class CustomPaintComponent extends Component {
public void paint(Graphics g) {
// Retrieve the graphics context; this object is used to paint shapes
Graphics2D g2d = (Graphics2D) g;
/**
* Draw an Image object The coordinate system of a graphics context
* is such that the origin is at the northwest corner and x-axis
* increases toward the right while the y-axis increases toward the
* bottom.
*/
int x = 0;
int y = 0;
g2d.drawImage(image, x, y, this);
}
}
}
Saludos