You're offscreen image should be a bufferedimage, which you then draw on the screen with drawImage(bufferedImage, x, y, observer).. inside the paint method of course. If you need to get to it's pixels then here are a couple choices.. if all you need is to get the color (RGB component) of the pixel then use the BufferedImage's getRGB() methods as follows: <pre>public int getRGB(int x, int y)</pre> this returns the color of the pixel at x, y and is returned as an 8-bit alpha, red, green, and blue component packed into an int, such that 1-8 (blue) 9-16(green) 16-24 (red) 25-32 (alpha). If the images data is stored in a different color format is converted before being returned. if you want to get a rectangle use: 
<pre>public int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)</pre> this return colors for a rectangle of pixels. The rectangle's size is according to the first 4 parameters, the rgbArray can be null and if so an int[] array will be created for you, the pixels colors are written into the array starting at the offset, and scansize is how many array elements should be in each row of returned data. if you desire even more control then you can get the BufferedImage's Raster and do pixel level manipulation there.. using the following: <pre> 
public int[] getPixel(int x, int y, int[] iArray) public double[] getPixel(int x, int y, double[] dArray) public float[] getPixel(int x, int y, float[] fArray) </pre> These will return samples for the pixels located at the given coordinates, each element returned will contain one of the pixel's samples. You can pass in "null" for the array and one will be created for you. <pre> 
public int[] getPixels(int x, int y, int w, int h, int[] iArray) public double[] getPixels(int x, int y, int w, int h, double[] dArray) public float[] getPixels(int x, int y, int w, int h, float[] fArray) </pre> The above do the same as the previous group but returns a rectangle of pixels as described by the first 4 parameters. You can once again pass in a null array and one will be created. Those are just a sample of the methods you can use to get the pixel to mess with it.. there are plenty more.. using ColorModel classes, SampleModel classes, etc. Plus almost every "get" method has a "set" counterpart. So once you get the pixel(s) you wish to change, and then do so, you can use the set method to replace the pixel.. such as: <pre>public void setRGB(int x, int y, int rgb)</pre> Where rgb as a packed integer containing alpha, red, green, and blue components. There's a lot you can do with an image using Java2D.. if you would like a more specific example, just post a hypothetical question such as I want to remove all the red color from the pixel at 4, 4. Hope that helps,