Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
To create an in-memory image, you need to create a one-dimensional array of pixel data. The two-dimensional pixel data are flattened into a one-dimensional array by placing the pixel at position (x, y) into the array at position (y*width+x). Each entry in the array represents a single pixel in the final image. Depending upon the color model used, that entry is either the combined RGB value of the pixel (plus alpha value for transparency) or an index into a color index array. Once you have your pixel array, you create the image by calling createImage. The single parameter to the method is a new instance of MemoryImageSource, with your pixel array and image size as its parameters.
The default ColorModel used by Java stores the blue value in bits 0-7, green in 8-15, red in 16-23, and the alpha value in 24-31. When alpha is zero, the pixel is transparent and the background color is seen through. When alpha is 255, the pixel is opaque and the actual pixel color is displayed. Values between 0 and 255 will let the background color bleed through.
The following applet creates a pixel array using a sine wave to set color values. (All the pixels are fully opaque.) Once you have the pixel array, you create the image with the i = createImage (new MemoryImageSource (width, height, pixels, 0, width)) call. As long as the pixel array is the entire image, the offset parameter for the MemoryImageSource constructor will be 0, and the scan size parameter will be the image width. You can then use the image like any other image retrieved across the network.
Here is the source code.
When using IndexColorModel, you need to provide multiple arrays: one for the pixel array and three for the color arrays -- one each for the red, green, and blue part of each color entry. The pixel array can be a byte array since each color array is restricted to 256 values.
The following applet creates the color arrays using different shades of green, and the pixel array is filled using modulo arithmetic. Once you have the color arrays and pixel array, you create the image with the i = createImage (new MemoryImageSource (width, height, new IndexColorModel (8, arraySize, reds, greens, blues), pixels, 0, width)) call. Everything else is just the same as with the default ColorModel.
Here is the source code.
That's all there is to it.