2013-04-28 55 views
1

我的代碼從屏幕在Java中,我有最後拍攝的圖像作爲BufferedImage對象可以投它的ImageIcon錯誤從Java發送拍攝的圖像到Android

的問題發送該文件時捕獲圖像到android不能讀取它作爲位圖繪製。任何人都有答案?

代碼發送(JAVA)

  BufferedImage image = robot.createScreenCapture(rectangle); 
     ImageIcon imageIcon = new ImageIcon(image); 

     //Send captured screen to the server 
     try { 
      System.out.println("before sending image");  

      oos.writeObject(imageIcon); 
      oos.reset(); //Clear ObjectOutputStream cache 
      System.out.println("New screenshot sent"); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 

Android的接收器部分

Thread t= new Thread(new Runnable() { 

     @Override 
     public void run() { 
      while (true) { 


       try { 

        client= sc.accept(); 
        is = client.getInputStream(); 

       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       BitmapDrawable imageIcon = null; 

       try { 
        ois = new ObjectInputStream(is); 
        imageIcon = (BitmapDrawable) ois.readObject(); 
        //Drawable d = Drawable.createFromStream(is, null); 
        IV.setImageDrawable(imageIcon); 
       } catch (OptionalDataException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (ClassNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       System.out.println("New image recieved"); 


      } 

     } 

我得到它的異常不能施放的ImageIcon或位圖繪製數據的BufferedImage。

回答

0

發生這種情況是因爲ImageIcon不是BitmapDrawable的味道,所以演員是不可能的。它與序列化無關,因爲演員陣容會隨時失敗。嘗試讓接收器接受對象爲ImageIcon,然後執行轉換以獲取所需的BitmapDrawable對象。

+0

是的,但Android中沒有ImageIcon類,我不知道該轉換! – MSaudi 2013-04-28 15:43:40

+0

也許最好開始一個新問題:「我如何將ImageIcon轉換爲Android中的BitmapDrawable?」。關於序列化和投射的東西確實會減損這個主要問題。不幸的是,我主要是一個Java開發人員,並且不太瞭解Android來幫助你。 :( – 2013-04-28 15:52:18

0

你不應該使用對象,因爲oracle jvm和android的dalvik不一樣。 嘗試將捕獲的圖像轉換爲原始字節並將這些字節發送給android。然後在android中隱藏這個原始數據來繪製。