Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

display image

Posted on 2004-10-28
13
Medium Priority
?
204 Views
Last Modified: 2010-05-18
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
Comment
Question by:tloip
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 5
13 Comments
 
LVL 2

Expert Comment

by:ThummalaRaghuveer
ID: 12441676
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
 

Author Comment

by:tloip
ID: 12442095
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
 
LVL 2

Expert Comment

by:ThummalaRaghuveer
ID: 12445159
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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 

Author Comment

by:tloip
ID: 12449711
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
 
LVL 2

Expert Comment

by:ThummalaRaghuveer
ID: 12450300
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
 

Author Comment

by:tloip
ID: 12450452

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
 

Author Comment

by:tloip
ID: 12450459
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
 

Author Comment

by:tloip
ID: 12450461
can u specify clearly for me?
I'm really in doubt on where i need to put the code..
0
 

Author Comment

by:tloip
ID: 12450473
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
 
LVL 2

Expert Comment

by:ThummalaRaghuveer
ID: 12452566
Atleast try to post the client side code...........
0
 
LVL 2

Accepted Solution

by:
ThummalaRaghuveer earned 240 total points
ID: 12454095
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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
The viewer will learn how to implement Singleton Design Pattern in Java.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
Suggested Courses

604 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question