oreg
asked on
Making image from Pixel Data
Hi,
I have been playing with images recently, particularly grabbing pixel data from an image using the PixelGrabber classes and storing this pixel data in an int array. From t here I have been reading various information about argb. I then started to edit this pixel data ( again, it is an int array ) and now I would like to draw this new image. ( I am just learning about pixel data, and things I can do...my first example is just making a color image grayscale ).
Now, if I take my int array and draw out each individual pixel, I can do that...but it is dreadfully slow on a 450MHz machine.
So...what I want to know, is given an int array of pixel data, how can I change this into a Java Image object. As I mentioned above, drawing each individual pixel to an image object is not an option, as it is way too slow...surly there must be a way in java to change pixel data to an image? ( since there is a way to change an image into pixel data )
Thank you for any help,
Oreg
I have been playing with images recently, particularly grabbing pixel data from an image using the PixelGrabber classes and storing this pixel data in an int array. From t here I have been reading various information about argb. I then started to edit this pixel data ( again, it is an int array ) and now I would like to draw this new image. ( I am just learning about pixel data, and things I can do...my first example is just making a color image grayscale ).
Now, if I take my int array and draw out each individual pixel, I can do that...but it is dreadfully slow on a 450MHz machine.
So...what I want to know, is given an int array of pixel data, how can I change this into a Java Image object. As I mentioned above, drawing each individual pixel to an image object is not an option, as it is way too slow...surly there must be a way in java to change pixel data to an image? ( since there is a way to change an image into pixel data )
Thank you for any help,
Oreg
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
/**
* This class is an implementation of the ImageProducer interface which
* uses an array to produce pixel values for an Image. Here is an example
* which calculates a 100x100 image representing a fade from black to blue
* along the X axis and a fade from black to red along the Y axis:
* <pre>
*
* int w = 100;
* int h = 100;
* int pix[] = new int[w * h];
* int index = 0;
* for (int y = 0; y < h; y++) {
* int red = (y * 255) / (h - 1);
* for (int x = 0; x < w; x++) {
* int blue = (x * 255) / (w - 1);
* pix[index++] = (255 << 24) | (red << 16) | blue;
* }
* }
* Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));
*
* </pre>
* The MemoryImageSource is also capable of managing a memory image which
* varies over time to allow animation or custom rendering. Here is an
* example showing how to set up the animation source and signal changes
* in the data (adapted from the MemoryAnimationSourceDemo by Garth Dickie):
* <pre>
*
* int pixels[];
* MemoryImageSource source;
*
* public void init() {
* int width = 50;
* int height = 50;
* int size = width * height;
* pixels = new int[size];
*
* int value = getBackground().getRGB();
* for (int i = 0; i < size; i++) {
* pixels[i] = value;
* }
*
* source = new MemoryImageSource(width, height, pixels, 0, width);
* source.setAnimated(true);
* image = createImage(source);
* }
*
* public void run() {
* Thread me = Thread.currentThread( );
* me.setPriority(Thread.MIN_
*
* while (true) {
* try {
* thread.sleep(10);
* } catch( InterruptedException e ) {
* return;
* }
*
* // Modify the values in the pixels array at (x, y, w, h)
*
* // Send the new data to the interested ImageConsumers
* source.newPixels(x, y, w, h);
* }
* }
js.