display image

I have a problem to display the loaded image at another client whiteboard.

For example, i load an image at Client1, the image will displayed at Client1 but also  at Client2 as well.

I got appendText() and sendImage() code that help my program but it couldn't work.



>> what i missed out??? :- s



public void actionPerformed(ActionEvent e) {



      if (e.getActionCommand().equals(lload) ) {

            final JFileChooser fc = new JFileChooser();

            int returnVal = fc.showOpenDialog(this);

            if (returnVal == JFileChooser.APPROVE_OPTION) {

                  File file = fc.getSelectedFile();

                           ctrl.loadImage(file.getAbsolutePath());

                        sendImage(file);

            }

      }

}





public void sendImage(File file) {

      //find length of file

      long len = file.length();

      //read file into byte array

      byte[] byteArray = new byte[(int)len];

      try {

            FileInputStream fstream = new FileInputStream(file);

            if (fstream.read(byteArray) < len) {

            //error could not load file

            } else {

                    out.println("IMAGE " + len + ",");

                  out.write(byteArray, 0, (int)len); //write file to stream

            }

      } catch(Exception e){}

}



public static void appendText(String text) {

      if (text.startsWith("IMAGE ") ) {

              int len = (new Integer( text.substring(6, text.indexOf(",")))).intValue();

      //get x and y coordinates

      byte[] data = new byte[ (int)len ];

      int read = 0;

        try {

              while (read < len) {

                      data = text.getBytes( text.substring(0, len) );

              }

        } catch (Exception e) {}

              Image theImage = null;

                  theImage = ctrl.getToolkit().createImage(data);

                  ctrl.getToolkit().prepareImage(theImage, -1, -1, ctrl);

                  while ((ctrl.getToolkit().checkImage(theImage, -1, -1, ctrl) & ctrl.ALLBITS) == 0) {}

            ctrl.drawPicture(0, 0, theImage);

        }

      }

} //end of appendText(String)
tloipAsked:
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.

ThummalaRaghuveerCommented:
At the receiving end I did it this way

BufferedImage newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));

where imageBytes is the byte[] that I received from other client..
in paint method of frame or what ever just say
g.drawImage(newImage,.......);

For the image observer required in the above method just write a dummy image observer like the one below and use its instance..
public class MyImageObserver implements ImageObserver {
      public boolean imageUpdate(Image img, int infoflags, int x, int y,
                  int width, int height) {
            //System.out.println("Image Displayed");
            return true;
      }
}
0
tloipAuthor Commented:
The code i post is done in gui.java

The code u gave, where should i put?in my gui.java or ctrl.java???

>>BufferedImage newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));

>>public class MyImageObserver implements ImageObserver {
     public boolean imageUpdate(Image img, int infoflags, int x, int y,
               int width, int height) {
          //System.out.println("Image Displayed");
          return true;
     }
}


also, you guide me to delete my posted code or add your code to mine as well??

hope to get more your guidance ...thx in advance ;-)
0
ThummalaRaghuveerCommented:
MyImageObserver is a completely new class....

In your class which handles repainting the frame or other visual just implement a method to update the image information like

public void setMyImage(byte[] imageBytes) {
BufferedImage newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));
//now call repaint() method
repaint();
}

Now add something like this in your paint(Graphics g) method....

public void paint(Graphics g) {

g.drawImage(newImage,0,0,new MyImageObserver());

}
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

tloipAuthor Commented:
So do i still need to include the code i posted?

I tried to put in gui.java file...

Error occured:

cannot resolve symbol
>class BufferedImage
BufferedImage newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));

cannot resolve symbol
>variable ImageIO
BufferedImage newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));

cannot resolve symbol
>variable newImage
g.drawImage(newImage,0,0,new MyImageObserver());

cannot resolve symbol
>class MyImageObserver
g.drawImage(newImage,0,0,new MyImageObserver());

Anything missed out?or i have placed in wrong file?
0
ThummalaRaghuveerCommented:
You need to import java.awt.image.BufferedImage
also import javax.imageio.ImageIO

need to change this method as the following

public void setMyImage(byte[] imageBytes) {
newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));
//now call repaint() method
repaint();
}

and declare newImage as a variable available in both the methods repaint and setMyImage
You can do this by declaring it in the begining of the class as follows

private BufferedImage newImage = null;

declare a new class MyImageObserver in the same folder or in a place and make it avialable to you code.....


But its diffucult to do it this way....... better is either you post your code or give a link to your code......
0
tloipAuthor Commented:

u mean this?put in the same file?or save it as another file?

class MyImageObserver{
private BufferedImage newImage = null;

public void setMyImage(byte[] imageBytes) {
newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));
//now call repaint() method
repaint();
}
}
0
tloipAuthor Commented:
i have 4 files in my program..
too big size to post.
and i don't know how to make a link for this..:-s

0
tloipAuthor Commented:
can u specify clearly for me?
I'm really in doubt on where i need to put the code..
0
tloipAuthor Commented:
error occured: cannot resolve Buffered and newImage

>>>>>>>>>
class MyImageObserver{
private BufferedImage newImage = null;

public void setMyImage(byte[] imageBytes) {
newImage = ImageIO.read(new ByteArrayInputStream(imageBytes));
//now call repaint() method
repaint();
}
}
0
ThummalaRaghuveerCommented:
Atleast try to post the client side code...........
0
ThummalaRaghuveerCommented:
public class MyImageObserver implements ImageObserver {
     public boolean imageUpdate(Image img, int infoflags, int x, int y,
               int width, int height) {
          //System.out.println("Image Displayed");
          return true;
     }
}

The rest of the methods should be in your client side gui handling class
0

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
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
Java

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.