我有一台没有Linux驱动程序的Epson Ex5220,并且一直试图通过wifi进行通信。我可以通过带有驱动程序的Windows机器连接和发送通过数据包跟踪捕获的图像,但无法创建可接受的图像。这就是问题所在:
在数据发送中,发送的jpeg图像带有这样的标题。
00:00:00:01:00:00:00:00:02:70:01:a0:00:00:00:07:90:80:85:00
00:00:00:04 - Number of jpeg images being sent (only the first header)
00:00 - X offset
00:00 - Y offset
02:70 - Width of Jpeg image (624 in this case)
01:a0 - Height of Jpeg image (416 in this case)
00:00:00:07:90 - Unknown (I believe it's a version number perhaps)
80:85:00 - (What I'm after) Some count of data units?
标题后面是一个普通的jpeg图像。如果我剥去那个标题,我可以查看图像。以下是突出显示3个字节的部分捕获的屏幕截图:
通过将最后三个字节设置为80:85:00,我找到了似乎是基线的内容。少一点,图像不会投射。我可以发送到投影机的最小图像尺寸是3w x 1h,这与我下面显示的前两张图像相关。
以下是一些例子:
然后我将3个字节更改为00:b5:80(将中间值增加0x30)
所以似乎3个字节与数据单元有关。我已经阅读了很多关于jpeg的内容,而且我还在消化它的大部分内容,但我想如果我知道计算数据单元需要什么,我就会发现我的神秘3字节。
附加信息:
投影机仅支持在数据发送中使用RGB565 jpeg图像。
答案 0 :(得分:1)
看起来你错误地解释了SOS标记是如何工作的。以下是您在一个示例中显示的字节:
SOS = 00 0C 03 01 00 02 11 03 11 00 3F 00 F9 FE
这错误地在SOS中包含两个字节的压缩数据(F9 FE)。 12(00 0C)的长度本身包括2个长度字节,因此该标记实际上只有10个字节的数据。
F9 FE之前的00字节是“逐次逼近”位字段,用于渐进式JPEG图像。它实际上是一对4位字段。
您在图像之间看到的变化字节实际上是前2个压缩数据字节(对第一个MCU的DC值进行编码)。
答案 1 :(得分:1)
(代表OP发布)。
我能够解决这个问题,但我想知道为什么会这样。这是最后3个字节的公式:
int iSize = bImage.length;
baHeader[17] = (byte) ((iSize) | 0x80);
baHeader[18] = (byte) ((iSize >> 7) | 0x80);
baHeader[19] = (byte) ((iSize >> 14));
我厌倦了搞乱它,只看几张图片,写下所有的文件大小和魔术字节,将所有内容转换为二进制文件,并在ANDing ORing位移时敲了一下,直到我强迫一个正式的工作。我想知道这是否与计算jpeg数据单元有关。我还在研究Jpeg,但这并不简单!