jpeg字节到十六进制值

时间:2017-11-21 07:41:50

标签: java android arrays jpeg mjpeg

我通过uvc接收了一个流,它给了我每个mjpeg流。

将jpeg帧写入位图时,从调试器查看的字节数组如下所示:

{ 0, -128, 1, -128, 0, -128, .......}

我通过这样做来创建文件:

bitmap.copyPixelsFromBuffer(frame);
File file = new File(Constants.CAPTURE_PATH, System.currentTimeMillis() + ".jpeg");
file.createNewFile();
out = new FileOutputStream(file);

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

在我创建文件并使用十六进制查看器查看其内部后,文件如下所示:

FF D8 FF E0 00.....

这是否意味着{0}成为FF,而{-128}成为D8?

有什么规则可以解决这个问题?任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

如果这些文件是文件十六进制查看器看到的文件中的第一个字节,则可能正在查看JPEG文件头。 FF D8 FF看起来非常相似。例如,请参阅here和维基百科页面here

我希望您在调试器中查看的数据是原始图像数据,不包含标题。

答案 1 :(得分:1)

在我们在评论中的简短对话之后,我觉得这是您正在寻找的信息。

您实际看到的是文件标题。标头本质上是一个文件开头的代码块,它告诉计算机它是什么,所以它知道如何处理它。

有关文件标题的更多信息:https://www.webopedia.com/TERM/H/header.html

现在,针对您的具体问题。使用jpegs(就像任​​何其他文件一样),他们有自己的标题和数据组织方式。 JPEG标头以FF D8开头,jpeg文件阅读器表示SOI(图像开始)。然后转到FF E0,这意味着APP0(应用程序段)。名单还在继续。

有关jpeg文件的更多信息:https://web.archive.org/web/20120403212223/http://class.ee.iastate.edu/ee528/Reading%20material/JPEG_File_Format.pdf

您需要做的是跳过标题并开始寻找您的“实际”数据。 jpeg文件头的一些棘手的部分是它们的大小不一样,所以你需要查找SOS(扫描开始)标记,如果我没有弄错并从那里开始。