在Java中转换图像。通过套接字传输图像
我有一台笔记本电脑和微控制器评估板MCB1700和微控制器NXP1768。 MCB1700有以太网端口、LCD(320 x 240)等。我有IDEµVision V4.03q用于在MCB1700上开发和下载C程序。此外,我还有用于在MCB1700上下载C程序的ULINK pro设备 我的任务是:在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上实现服务器,该服务器
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
对流有何影响
它会通知方法对图像编码的格式。有关支持的格式,请参阅
就编码而言,它简单地归结为:
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());