直接将图像发送到Epson Projector,无法解码jpeg图像

时间:2016-05-14 06:12:27

标签: jpeg

我有一台没有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个字节的部分捕获的屏幕截图:

Partial capture showing header

通过将最后三个字节设置为80:85:00,我找到了似乎是基线的内容。少一点,图像不会投射。我可以发送到投影机的最小图像尺寸是3w x 1h,这与我下面显示的前两张图像相关。

以下是一些例子:

1a - 全白(RGB565)图像1024x768 - 文件大小12915 - 4块

#1a - All white image 1024x768

2a - 彩色(RGB565)图像1024x768 - 文件大小58577 - 仅3个块

#2a - Color (RGB565) image 1024x768

然后我将3个字节更改为00:b5:80(将中间值增加0x30)

1b - 全白(RGB565)图像1024x768 - 文件大小12915 - 22个完整行和4个块。

All white (RGB565) image 1024x768

2b - 彩色(RGB565)图像1024x768 - 文件大小58577 - 7行和22个块。

Color (RGB565) image 1024x768

所以似乎3个字节与数据单元有关。我已经阅读了很多关于jpeg的内容,而且我还在消化它的大部分内容,但我想如果我知道计算数据单元需要什么,我就会发现我的神秘3字节。

附加信息:

投影机仅支持在数据发送中使用RGB565 jpeg图像。

2 个答案:

答案 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,但这并不简单!