• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 209
  • Last Modified:

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)
0
tloip
Asked:
tloip
  • 6
  • 5
1 Solution
 
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
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
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

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now