【发布时间】:2012-05-06 08:27:09
【问题描述】:
我有一台笔记本电脑和带有微控制器 NXP1768 的微控制器评估板 MCB1700。 MCB1700 有以太网端口、LCD (320 x 240) 等。我有 IDE µVision V4.03q 用于在 MCB1700 上开发和下载 C 程序。我还有 ULINK-pro 设备,用于在 MCB1700 上下载 C 程序。
我的任务是:
- 实现笔记本电脑的Java-客户端,从笔记本电脑读取图像,将此图像转换为RGB16(MCB1700的LCD支持这种图像表示)并通过套接字连接将其发送给MCB1700
- 在 MCB1700 上实现服务器,通过 Socket 连接从笔记本电脑接收图像并将其显示在 LCD 上。
- 实际上还有很多其他任务要做,笔记本电脑还必须向 MCB1700 发送要执行的命令名称。但问题是关于笔记本电脑和 MCB1700 之间的连接。
我几乎已经完成了服务器端。我当前版本的服务器创建被动套接字连接并等待客户端。它还可以通过以太网发送和接收数据。 我的 Java 客户端成功连接到服务器。我通过发送和接收短线来测试它。现在我可以开发它来向服务器发送命令的名称(例如“SHOW ON LCD:”)和 RGB16 图像。
问题是: 通过套接字连接将命令的名称和 RGB16 图像从 Java 客户端发送到 MCB1700 服务器(在 C 上实现)以便在服务器 C 程序中方便地转换数据的最佳方法是什么?以字节数组的形式发送所有数据会很棒:
MCB1700-server 必须以字节序列的形式接收数据
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-client 中读取和转换图像?
4) 我发现了这种有趣的图像传输方式,使用这种ImageIO 方法:
Sending a screenshot (bufferedImage) over a socket in java
public static boolean write(RenderedImage im,
String formatName,
OutputStream output)
BufferedImage image = ....;
ImageIO.write(image, "PNG", socket.getOutputStream());
但我不确定它是否适合我的情况。 String formatName 对流有什么影响?我没有任何想法。可能是它增加了一些额外的字节......
【问题讨论】:
-
据我统计,您有 6 个问题。你想要每个答案的 1/6,还是我应该随机选择一个来回答?或者换一种说法,尝试将其限制为每个帖子一个问题 - 我认为一个非常无聊的人会回答所有 6 个问题(甚至阅读所有问题)。
-
对不起,我是这个资源的新手。昨天没看到你评论。我想知道最后一个问题的答案。这对我来说很重要。