Link to home
Start Free TrialLog in
Avatar of etgaroy
etgaroy

asked on

Create image with MemoryImageSource

Hi all,
I'm trying to create an image with MemoryImageSource from an array of pixels. I know the array represents a valid image but I do not get any image on the panel. This is my code:

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ShowImage extends JFrame {
  private Container container;
  private BorderLayout borderLayout;
  private BufferedReader bReader;
  private int[] pixelArray;
  private int[] finalArray;
  private int[][] newArray;
  private int width = 400, height = 360, currentPixel = 0, i = 0, j = 0, temp = 0;
  private boolean isNumber = false;
//  private Image image;
  private MakePic makePic;

  public ShowImage() {
    super ("Cirius Display");               // setting title to page
    container = getContentPane();
    borderLayout = new BorderLayout (5,5);  // set the layout gap size
    container.setLayout(borderLayout);
    pixelArray = new int[width*height];
    newArray = new int[height*2][width*2];
    makePic = new MakePic ();
    makePic();
    container.add(makePic, BorderLayout.CENTER);
    pack();
    setSize (1024,768);
    show();
  }

  public void makePic ()
  {
    try {
      bReader = new BufferedReader(new FileReader("array.txt"));
      String result = bReader.readLine();
      for (int index = 0; index < result.length(); index++)
      {
        if ((result.charAt(index) >= '0')&&(result.charAt(index) <= '9'))
        {
          isNumber = true;
          currentPixel = currentPixel*10 + (result.charAt(index) - '0');
        }
        else
        {
          if (isNumber)
          {
            isNumber = false;
            pixelArray[temp++] = currentPixel;
            currentPixel = 0;
          }
        }
      }
    }
    catch (IOException e)
    {
      System.out.println("IOException");
    }
    writeMatrix();
}

  public void writeMatrix ()
  {
    for (i = 0; i < height; i++)
    {
      for (j = 0; j < width; j++)
      {
        if (pixelArray[i*width + j] < 51)
        {
          newArray[2*i][2*j] = 0;
          newArray[(2*i) + 1][2*j] = 0;
          newArray[i*2][(2*j) + 1] = 0;
          newArray[(2*i) + 1][(2*j) + 1] = 0;
        }
        else
        {
          if (pixelArray[i*width + j] < 102)
          {
            newArray[2*i][2*j] = 1;
            newArray[(2*i) + 1][2*j] = 0;
            newArray[i*2][(2*j) + 1] = 0;
            newArray[(2*i) + 1][(2*j) + 1] = 0;
          }
          else
          {
            if (pixelArray[i*width + j] < 153)
            {
              newArray[2*i][2*j] = 1;
              newArray[(2*i) + 1][2*j] = 0;
              newArray[i*2][(2*j) + 1] = 1;
              newArray[(2*i) + 1][(2*j) + 1] = 0;
            }
            else
            {
              if (pixelArray[i*width + j] < 204)
              {
                newArray[2*i][2*j] = 1;
                newArray[(2*i) + 1][2*j] = 1;
                newArray[i*2][(2*j) + 1] = 1;
                newArray[(2*i) + 1][(2*j) + 1] = 0;
              }
              else
              {
                newArray[2*i][2*j] = 1;
                newArray[(2*i) + 1][2*j] = 1;
                newArray[i*2][(2*j) + 1] = 1;
                newArray[(2*i) + 1][(2*j) + 1] = 1;
              }
            }
          }
        }
      }
    }
    finalArray = new int[width*height*4];
    for (i = 0; i < height*2; i++)
    {
      for (j = 0; j < width*2; j++)
      {
        finalArray[i*width + j] = newArray[i][j];
      }
    }
    System.out.println("111");
    makePic.getPixel(finalArray);
  }


  public static void main (String args[])
  {
    ShowImage showImage = new ShowImage();
    showImage.addWindowListener(
      new WindowAdapter ()
      {
        public void windowClosing (WindowEvent e)
        {
          System.exit(0);
        }
      }
    );
  }

}


// The Class that is responsible for painting the panel:

import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.image.*;

public class MakePic extends JPanel {
  private Image modImage;

  public MakePic() {

  }

  public void getPixel (int[] pixels)
  {
    for (int i = 0 ; i < pixels.length; i++)
      System.out.println (pixels[i]+" ");
    System.out.println (pixels.length);
    modImage = createImage (new MemoryImageSource(400,360,pixels,0,400));
    System.out.println ("333");
    repaint();
  }

  public void paintComponent (Graphics g)
  {
    g.drawImage(modImage,0,0,this);
  }

}


Thanks,
g
ASKER CERTIFIED SOLUTION
Avatar of TimYates
TimYates
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of etgaroy
etgaroy

ASKER

It works- thanks.
How do I change the color of the background which is blue back to white?
g
try filling your image array with 0xFFFFFF before you do your drawing...  hope this helps :-)

Good luck!

Tim.