.NET 4.x Передача матрицы изображения по сети - C#
Формулировка задачи:
Нужно передать картинку с телефона на сервер. Для телефона пиши на Java(Android Studio), а для сервера пишу на C#(Visusl Studio 2010).
В телефонном приложении применяю библиотеку OpenCV, а в серверном Emgu CV. С камеры кадр сохраняю в матрице Mat и нахожу прямоугольные участки(картины). Найденный участок или весь кадр нужно отправить на сервер. Сервер должен принять изображение и обработать.
Проблема возникла в передаче матрицы изображения. Есть кусок кода, неизвестно работает он или нет, т.к. не знаю как преобразовать массив в матрицу. Как преобразовать массив в матрицу? И если не правильно передаю данные, то как правильно передать? Текстовое сообщенис с сервера на телефон нормально передает.
Отправка с телефона.class WorkingClass implements Runnable{ @Override public void run() { try { Socket socket = new Socket("192.168.0.91", 80); //mRgba - матрица кадра. DataOutputStream dOut = new DataOutputStream(socket.getOutputStream()); byte[] byte_array = new byte[(int)(mRgba.total() * mRgba.channels())]; mRgba.get(0, 0, byte_array); int size = byte_array.length; int width = (int)mRgba.size().width; int height = (int)mRgba.size().height; dOut.writeLong(size); dOut.writeInt(width); dOut.writeInt(height); dOut.write(byte_array); dOut.flush(); in = new BufferedReader(new InputStreamReader( socket.getInputStream())); Log.d("Приняли; ", in.readLine()); socket.close(); } catch (Exception ee) { Log.d("sample application: ", "Fatal ERROR"); Log.d("sample application: ", ee.toString()); } } }
public void SocketTcpServer() { // создаем сокет Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { int port = 80; IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("192.168.0.91"), port); // связываем сокет с локальной точкой, по которой будем принимать данные listenSocket.Bind(ipPoint); // начинаем прослушивание listenSocket.Listen(10); IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint; byte[] imageByteArray; while (true) { Socket handler = listenSocket.Accept(); // получаем сообщение StringBuilder builder = new StringBuilder(); byte[] data = new byte[256]; // буфер для получаемых данных int size = handler.Receive(data); int width = handler.Receive(data); int height = handler.Receive(data); imageByteArray = new byte[(int)size]; builder.Append(Encoding.Default.GetString(imageByteArray, 0, size)); Mat mat = new Mat(); //??? конвертировать массив в матрицу // отправляем ответ string message = "ваше сообщение доставлено"; data = Encoding.UTF8.GetBytes(message); handler.Send(data); // закрываем сокет handler.Shutdown(SocketShutdown.Both); handler.Close(); } } catch(Exception ex) { Console.WriteLine(ex.Message); } }
Решение задачи: «.NET 4.x Передача матрицы изображения по сети»
textual
Листинг программы
try { var tl = new TcpListener(IPAddress.Parse("192.168.0.91"), 80); tl.Start(); var client = tl.AcceptTcpClient(); using (var ns = client.GetStream()) using (var br = new BinaryReader(ns)) { while (true) { //принимаем размер пакета count = br.ReadInt32(); //принимаем пакет byte[] data = br.ReadBytes(count); //Точка отановки процесса. //разжимаем данные data = DeCompress(data); //отправляем данные в очередь принятых данных lock (incomingData) incomingData.EnqueueRange(data); } } } catch (Exception e) { Console.WriteLine(e.Message); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д