2013-03-03 5 views
1

Я могу отправить строки с моего мобильного телефона Android на свой компьютер и наоборот. Однако я хочу отправить изображение с моего компьютера и отобразить его на мобильный телефон. В моем случае компьютер - это сервер, а мобильный телефон - клиент.Отображение изображения из InputStream

Это часть моего кода на стороне сервера:

socket = serverSocket.accept(); 
dataOutputStream = new DataOutputStream(socket.getOutputStream()); 
captureScreen("C:\\Users\\HP\\Desktop\\capture.png"); 

File f = new File("C:\\Users\\HP\\Desktop\\capture.png"); 
byte [] buffer = new byte[(int)f.length()]; 
dataOutputStream.write(buffer,0,buffer.length); 
dataOutputStream.flush(); 

Обратите внимание, что captureScreen() является метод, который успешно принимает скриншот сервера и сохранить его как .PNG изображения в указанном выше пути.

Теперь на стороне клиента, который является Android мобильного телефона, если у меня есть ImageView контроля, как читать изображение передаваемое из компьютера как InputStream и отображать его на ImageView?

Кроме того, я успешно написал изображение на dataOutputStream? Я был бы рад, если бы кто-нибудь мне помог!

ответ

1

Вы можете позвонить по номеру setImageBitmap(Bitmap bm) вашего ImageView.

http://developer.android.com/reference/android/widget/ImageView.html

Как получить данные изображения для вашего клиента: это зависит от решения, которое вы выбрали, но технически вы можете использовать те же библиотеки, которые вы могли бы использовать для чистой Java.

Вы можете использовать android.graphics.BitmapFactory, чтобы создать Bitmap из вашего потока.

http://developer.android.com/reference/android/graphics/BitmapFactory.html

Bitmap bitmap1 = BitmapFactory.decodeStream(inputStream); 
Bitmap bitmap2 = BitmapFactory.decodeFile(filename); 
+0

Можете ли вы показать мне, пожалуйста, какой-нибудь код для создания растрового изображения из inputStream? –

+0

Спасибо, но decodeStream (inputStream) не работает, я думаю, что он возвращает null –

+0

Вы можете попробовать разные версии, их там дюжина. «null» в качестве возвращаемого значения означает, что вход был неправильным. Я рекомендую попробовать его с локальным файлом 'png' (например, значок запуска), он должен работать с этим. – gaborsch

1

что это?

byte [] buffer = new byte[(int)f.length()]; 
    dataOutputStream.write(buffer,0,buffer.length); 

Вы только что указали размер массива буферов, но он пуст! Вы должны преобразовать файл в байты и чем передать его OutputStream, чему-л так:

byte[] buffer = System.IO.File.ReadAllBytes("C:\\Users\\HP\\Desktop\\capture.png"); 

(код для C#) И чем вы отправите его, как вы делали:

 dataOutputStream.write(buffer,0,buffer.length); 
    dataOutputStream.flush(); 

попробуйте это для получения файла:

public void fileReceived(InputStream is) 
throws FileNotFoundException, IOException { 
Log.i("IMSERVICE", "FILERECCC-1"); 


if (is!= null) { 
    FileOutputStream fos = null; 
    BufferedOutputStream bos = null; 
    try { 
     fos = new FileOutputStream("/sdcard/chats/gas1.jpg/"); 
     bos = new BufferedOutputStream(fos); 
     byte[] aByte = new byte[1024]; 
     int bytesRead; 

     while ((bytesRead = is.read(aByte)) != -1) { 
      bos.write(aByte, 0, bytesRead); 
     } 
     bos.flush(); 
     bos.close(); 
     Log.i("IMSERVICE", "FILERECCC-2"); 

    } catch (IOException ex) { 
     // Do exception handling 
    } 
} 
} 
} 

Итак, у вас будет новый файл на вашей SD-карте на Android.

+0

Может ли провидеть меня, пожалуйста, с кодом Java этого преобразования? –

+0

Почти то же самое, @WassiMZgheiB: 'Path path = Paths.get (« путь/в/файл »); byte [] data = Files.readAllBytes (path); ' – Overrided

+0

@Overrided thanks, я написал эти байты в outputStream, но как я могу прочитать их на стороне клиента как inputStream? –

Смежные вопросы