Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中转换图像。通过套接字传输图像_Java_Image_Sockets - Fatal编程技术网

在Java中转换图像。通过套接字传输图像

在Java中转换图像。通过套接字传输图像,java,image,sockets,Java,Image,Sockets,我有一台笔记本电脑和微控制器评估板MCB1700和微控制器NXP1768。 MCB1700有以太网端口、LCD(320 x 240)等。我有IDEµVision V4.03q用于在MCB1700上开发和下载C程序。此外,我还有用于在MCB1700上下载C程序的ULINK pro设备 我的任务是: 为了实现从笔记本电脑读取图像的Java-client,将该图像转换为RGB16(MCB1700的LCD支持这种图像表示),并通过套接字连接将其发送给MCB1700 在MCB1700上实现服务器,该服务器

我有一台笔记本电脑和微控制器评估板MCB1700和微控制器NXP1768。 MCB1700有以太网端口、LCD(320 x 240)等。我有IDEµVision V4.03q用于在MCB1700上开发和下载C程序。此外,我还有用于在MCB1700上下载C程序的ULINK pro设备

我的任务是:

  • 为了实现从笔记本电脑读取图像的Java-client,将该图像转换为RGB16(MCB1700的LCD支持这种图像表示),并通过套接字连接将其发送给MCB1700
  • 在MCB1700上实现服务器,该服务器通过套接字连接从笔记本电脑接收图像并在LCD上显示
  • 实际上还有很多其他任务要做,笔记本电脑还必须向MCB1700发送要执行的命令名。但问题是笔记本电脑和MCB1700之间的连接
  • 我几乎完成了服务器端的工作。我当前版本的服务器创建被动套接字连接并等待客户端。它还可以通过以太网发送和接收数据。 我的Java客户端成功连接到服务器。我通过发送和接收短线来测试它。现在我可以开发它向服务器发送命令名(例如“SHOW ON LCD:”)和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) 我可以以某种方式(我还不知道如何)将图像放入类型为
    buffereImage
    的对象中(它支持所需的图像格式):

    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
    方法通过套接字进行图像传输:

    但我不确定它是否适合我的情况。
    String formatName
    对流有何影响?我不知道。可能是它增加了一些额外的字节

    ImageIO.write(image, "PNG", socket.getOutputStream());
    
    String formatName
    对流有何影响

    它会通知方法对图像编码的格式。有关支持的格式,请参阅

    就编码而言,它简单地归结为:

  • 使用已知的、受支持的格式
  • 在发送方使用与接收方相同的格式
  • PNG是一个不错的选择。它不像JPEG那样有损,也不像GIF那样仅限于256色。由于这些原因,它是唯一推荐的格式

    String formatName
    对流有何影响

    它会通知方法对图像编码的格式。有关支持的格式,请参阅

    就编码而言,它简单地归结为:

  • 使用已知的、受支持的格式
  • 在发送方使用与接收方相同的格式

  • PNG是一个不错的选择。它不像JPEG那样有损,也不像GIF那样仅限于256色。由于这些原因,它是唯一推荐的格式。

    据我统计,您有6个问题。您是希望每个答案都有1/6的答案,还是我应该随机挑选一个来回答?或者换一种方式说,试着把每个帖子的问题限制在一个以内——我想这需要一个非常无聊的人来回答所有的6个问题(甚至阅读所有的问题)。对不起,我是这个资源的新手。我昨天没有看到你发表评论。我想知道最后一个问题的答案。这对我来说非常重要。据我统计,你有6个问题。您是希望每个答案都有1/6的答案,还是我应该随机挑选一个来回答?或者换一种方式说,试着把每个帖子的问题限制在一个以内——我想这需要一个非常无聊的人来回答所有的6个问题(甚至阅读所有的问题)。对不起,我是这个资源的新手。我昨天没有看到你发表评论。我想知道最后一个问题的答案。这对我来说很重要。谢谢你的回答。但我不需要任何格式(“PNG”、“JPEG”等)。微控制器不支持它们。我想发送一个类似RGB565像素序列的图像(例如:12_1F 24_C3…67_02)。服务器(在C语言上实现)接收它,在数据字段上设置(无符号短*)指针,我们可以通过该指针访问图像矩阵的像素[0][0](12_1F)。操作指针++后,我们可以访问下一个像素[0][1](24_C3)等等。。。可以用ImageIO.write(…)或其他方式进行吗?谢谢您的回答。但我不需要任何格式(“PNG”、“JPEG”等)。微控制器不支持它们。我想发送一个类似RGB565像素序列的图像(例如:12_1F 24_C3…67_02)。服务器(在C语言上实现)接收它,在数据字段上设置(无符号短*)指针,我们可以通过该指针访问图像矩阵的像素[0][0](12_1F)。操作指针++后,我们可以访问下一个像素[0][1](24_C3)等等。。。它可以通过ImageIO.write(…)或其他方式实现吗?
    public static boolean write(RenderedImage im,
                                String formatName,
                                OutputStream output)
    
    
    BufferedImage image = ....;
    ImageIO.write(image, "PNG", socket.getOutputStream());
    
    ImageIO.write(image, "PNG", socket.getOutputStream());