Solved

display image

Posted on 2004-10-28
159 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
Question by:tloip
    11 Comments
     
    LVL 2

    Expert Comment

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

    Author Comment

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

    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
    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
    can u specify clearly for me?
    I'm really in doubt on where i need to put the code..
    0
     

    Author Comment

    by:tloip
    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
    Atleast try to post the client side code...........
    0
     
    LVL 2

    Accepted Solution

    by:
    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

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone.

    Featured Post

    How to improve team productivity

    Quip adds documents, spreadsheets, and tasklists to your Slack experience
    - Elevate ideas to Quip docs
    - Share Quip docs in Slack
    - Get notified of changes to your docs
    - Available on iOS/Android/Desktop/Web
    - Online/Offline

    Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
    Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
    Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
    Video by: Michael
    Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …

    884 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

    Need Help in Real-Time?

    Connect with top rated Experts

    16 Experts available now in Live!

    Get 1:1 Help Now