У меня есть ноутбук и оценочная плата микроконтроллера MCB1700 с микроконтроллером NXP1768.MCB1700 имеет порт Ethernet, ЖК-дисплей (320 x 240) и т. Д. У меня есть IDE µVision V4.03q для разработки и загрузки C-программ на MCB1700.Также у меня есть устройство ULINK-pro для загрузки C-программ на MCB1700.
Моя задача:
- реализовать Java-клиент для ноутбука, который читает изображение с ноутбука, конвертирует это изображениена RGB16 (ЖК-дисплей MCB1700 поддерживает такое представление изображений) и отправляет его на MCB1700 через сокетное соединение
- для реализации сервера на MCB1700, который получает изображения с ноутбука через Socket-соединение и отображает его на ЖК-дисплее.
- На самом деле нужно выполнить много других задач, и ноутбук должен также отправить MCB1700 название команды для выполнения.Но вопрос о соединении между ноутбуком и MCB1700.
Я почти сделал на стороне сервера.Моя текущая версия сервера создает пассивное сокетное соединение и ждет клиента.Он также может отправлять и получать данные через Ethernet.Мой Java-клиент успешно подключается к серверу.Я проверял это, отправляя и получая короткие строки.Теперь я могу разработать его для отправки на сервер имени Команды (например, «ПОКАЗАТЬ НА ЖКД:») и RGB16-изображение.
Вопрос в том, как лучше всего отправить имя Команды иRGB16-образ от Java-клиента до MCB1700-сервера (реализован на C) через сокет-соединение для удобного приведения данных в C-программу сервера?Было бы здорово отправить все данные в виде байтового массива:
MCB1700-сервер должен получать данные в виде последовательности байтов
char* "SHOW ON LCD:" - bytes 0 - 11
unsigned short**
RGB16-Pixel[0][0] = 09 AE - bytes 12 - 13
RGB16-Pixel[0][1] = 14 1C - bytes 14 - 15
RGB16-Pixel[319][239] = 78 9F - bytes 76810 - 76811
(извините за качество этой иллюстрации)
Как лучше всего прочитать изображение любого формата в Java-клиенте и отправить его на MCB1700 в виде байтового массива (как на картинке выше)?Какие функции, классы я должен использовать?На самом деле, у меня есть несколько идей:
1) Я могу каким-то образом поместить изображение (пока не знаю, как) в объект типа BufferedImage
(он поддерживает необходимый формат изображения):
BufferedImage image =
new BufferedImage(320, 240, TYPE_USHORT_565_RGB);
2) Читайте каждый его пиксель в цикле.
int oldRGB = image.getRGB(250, 180);
3) И отправляйте каждый пиксель изображения последовательно, байт за байтом
Socket connectionToDevice; //Socket
OutputStream outToServerStream;
outToServerStream = connectionToDevice.getOutputStream();
outToServerStream.write( bytes of pixel to send );
Есть ли ещеИзящный способ выполнить эту задачу?Как читать и преобразовывать изображение в Java-клиенте?
4) Я нашел такой интересный способ передачи изображения через сокет с использованием такого метода ImageIO
: Отправка снимка экрана (bufferedImage) поверхсокет в java
public static boolean write(RenderedImage im,
String formatName,
OutputStream output)
BufferedImage image = ....;
ImageIO.write(image, "PNG", socket.getOutputStream());
Но я не уверен, что он подходит в моем случае.Как String formatName
влияет на поток?Понятия не имею.Может быть, это добавляет несколько дополнительных байтов ...