在PC端是用C#写的代码如下//抓取全屏幕
            g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight));
           // img.Save("E:\\test.Jpegs");
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            BT.stream = stream;
            BT.stream.Flush();
通过BT.stream这个流发到手机端上,手机端接收代码如下
BufferedInputStream bis = new BufferedInputStream(input);
Bitmap bit = BitmapFactory.decodeStream(bis);
在C#端应该是传递了一个二进制的流,但在手机端我真的不知道这种读取方式是否正确。请教大家手机端盖用什么方法接收,或者什么思路。我现在具体不知道是哪里错了,大家都进来聊聊吧

解决方案 »

  1.   

     //得到图片的二进制数据  
     byte[] data ;
    //图片处理  
     Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
      

  2.   

    开一个线程来接收完整流写到byte[]数组中,再转换!
      

  3.   

    线程开了,具体的取得byte[]的方法,iput.read()吗?
      

  4.   

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
      int len = 0;
      byte[] datas = new byte[1024];
      while((len = in.read(datas,0,1024)) != -1)
      baos.write(datas, 0, len); Bitmap bmp  = BitmapFactory.decodeByteArray(datas, 0, baos.toByteArray().length);
      

  5.   

    用read()方法 怎么判断是否 流结束呢?
      

  6.   

    亲,按你说的做了下,还是read方法读不到public InputStream input ;
    int len = 0;
    byte[] datas = new byte[1024];
    input = RemoteControlActivity.btSocket.getInputStream();
    while((len = input.read(datas,0,1024)) != -1)
    {
    input.read(datas, 0, len);
    Log.i("aaaaa", "bbbbb ");
    }
    Bitmap bitmap = BitmapFactory.decodeByteArray(datas, 0, datas.length);全文代码如下,请您帮忙看下:
    package bnu.ep;import java.io.BufferedInputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;import javax.swing.ImageIcon;import android.app.Activity;
    import android.bluetooth.BluetoothServerSocket;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.util.Log;
    import android.widget.Toast;public class BlueServer 
    {
    public InputStream input ;
    private RemoteControlActivity RCA;
    private control ct;
    private BluetoothServerSocket my_server;
    listen2 lis;
    private byte[] by;
    void start()
    {
    RCA = new RemoteControlActivity() ;
    ct = new control();
     lis = new listen2();
    // ByteArrayInputStream baos = new ByteArrayInputStream();

    //listen(listen1()).start();
    lis.start(); }
    class  listen2 extends Thread
    {
    public void run()
    {
    int len = 0;
    byte[] datas = new byte[1024];

    try {
    Log.i("before", "bbbbb ");
    input = RemoteControlActivity.btSocket.getInputStream();

    Log.i("after", "bbbbb ");
    int n = 0; while((len = input.read(datas,0,1024)) != -1)
    {
    input.read(datas, 0, len);
    Log.i("aaaaa", "bbbbb ");
    }
    Bitmap bitmap = BitmapFactory.decodeByteArray(datas, 0, datas.length);
    ct.bit = bitmap;
    ct.setimagebitmp();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Log.i("error", "bbbbb ");
    }

    }

    }
    }
      

  7.   

    Log.i("before", "bbbbb ");
      input = RemoteControlActivity.btSocket.getInputStream();代码执行没有?
    input是否为空??
      

  8.   


       input = RemoteControlActivity.btSocket.getInputStream();
                    
                    Log.i("after", "bbbbb ");
                    int n = 0;                while((len = input.read(datas,0,1024)) != -1)
                    {
                            input.read(datas, 0, len);    
                            Log.i("aaaaa", "bbbbb ");
                    }
    这句中你的while判断条件已经从流中读取了,为什么循环体里面还是input.read(datas, 0, len);?
    里面应该是把它写到字节数组中,  baos.write(datas, 0, len);
      

  9.   

      while((len = input.read(datas,0,1024)) != -1)
    这句话的意思是读取1024B的数据到datas数组中,如果到达文件结尾,那么返回-1,判断的同时就将数据写到数组中了,所以你的循环体里面不需要在写进datas了,而是将datas里面的数据写入输出流。
      

  10.   

    网络端到手机终端的图片传输何需这么费劲,这样服务端跟客户端都需要写,不妨直接利用http协议读取不就行了。
    部分代码如下:
    try {
    URL url=new URL(”网络图片地址“);
    URLConnection conn=url.openConnection();
    conn.setConnectTimeout(120000);
    in=conn.getInputStream();
    File f = new File(”存到本地路径“);
    FileOutputStream fos=new FileOutputStream(f);

        byte[] buffer = new byte[1024];
                int length;
                while ((byteread = in.read(buffer)) != -1) {
                    bytesum += byteread;
                    fos.write(buffer, 0, byteread);
                }
                fos.flush();
    fos.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return false;
    }