Making image from Pixel Data


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 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,
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

There is a corresponding class called MemoryImageSource in java.awt.image that does exactly what you are after. You activate it with a call to createImage (in Component or Toolkit class) and the MemoryImageSource imageproducer object you have created.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
java.awt.image.MemoryImageSource is the class you are looking. The following is explain better:

 * 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_PRIORITY);
 *          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);
 *          }
 *      }

It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.