Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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
C# JPEG endianness对编码有何影响?_C#_.net_Endianness - Fatal编程技术网

C# JPEG endianness对编码有何影响?

C# JPEG endianness对编码有何影响?,c#,.net,endianness,C#,.net,Endianness,我目前正在做一个涉及图片的大项目。我遇到的一个大问题是图片的结尾(jpeg更清晰)。我一直认为在现代社会,我们不必在这个问题上胡说八道,但现在我不确定了 我所做的: 我向IP摄像机发出HTTP请求,摄像机返回一个字节数组 我使用Image.FromStream将这些字节解析为.NET中的对象图像 我将图像对象保存到硬盘上的物理文件中 这些图片然后在我的应用程序的另一个模块中使用,该模块使用第三方“查看器”对图像进行一些操作。查看器可以处理在Windows XP和Windows Vista中使用计

我目前正在做一个涉及图片的大项目。我遇到的一个大问题是图片的结尾(jpeg更清晰)。我一直认为在现代社会,我们不必在这个问题上胡说八道,但现在我不确定了

我所做的:

  • 我向IP摄像机发出HTTP请求,摄像机返回一个字节数组
  • 我使用Image.FromStream将这些字节解析为.NET中的对象图像
  • 我将图像对象保存到硬盘上的物理文件中
  • 这些图片然后在我的应用程序的另一个模块中使用,该模块使用第三方“查看器”对图像进行一些操作。查看器可以处理在Windows XP和Windows Vista中使用计算机生成的所有图片。但是,当使用Windows7机器生成图片时,所有图片都是乱七八糟的

    假设使用Windows XP创建的图片称为PictureExp,使用Windows 7创建的图片称为Picture7 我使用exiftools检查了这些文件,发现PictureExp和Picture7之间有两个不同的字段

    PictureXP:Exif字节顺序:小端 图7:Exif字节顺序:Big-endian Picture7还有一个附加字段:用户注释:

    这两张图片可以在任何照片查看器中正常打开,只有在这个第三方查看器中,图片才会显示为全部混合,三张图片之间的唯一区别是这些字段

    我想知道的是:

  • 第三方是否可能需要在其软件中添加额外的代码,以便处理图片的结尾?我想所有的图片程序都能解决这个问题
  • 我是否可以将jpeg的endian更改为始终为little endian?我在某个地方读到,jpeg文件的内容总是应该是相同的尾端,但它似乎没有考虑exif数据。如果可能的话,我希望在.NET中有一个解决方案
  • 任何有助于克服这种情况的措施也将被视为一种解决办法
  • 非常感谢


    编辑1:我发现这证实了在exif头中找到的endian仅适用于exif头,并且jpeg文件始终使用big-endian。那么,有没有办法更改exif标题,以便第三方软件能够读取他需要的内容?

    我认为问题可能在于用户评论字段。我了解到,无论EXIF信息的字节顺序如何,WindowsVista(可能还有Windows7)都会以小尾端字节顺序将用户注释字段保存为Unicode。 因为PictureXP和Picture7之间的唯一区别是exif信息和用户注释字段的结尾,也许您应该这样看


    祝你好运

    好的,所以我通过向《圣经》的作者菲尔提问找到了答案

    你可以看到我和他在一起的线索

  • 是的,这是可能的。第三方SDK不知道exif头可以使用little-endian或big-endian编码,并且只使用little-endian读取。把我所有的照片都改成little endian解决了这个问题
  • 回答:首先,jpeg的数据总是大端的,就像我在编辑中说的那样。第二,exif头可以是小端或大端,可以使用exiftool进行更改
  • 在命令行中:

    exiftool-all=-tagsfromfile test.jpg-all:all-unsafe-exifbyteorder=little-endian test.jpg

    您还可以在这里找到几乎任何语言的工具包装器


    非常感谢您对这个问题和我收到的答案感兴趣。

    哇,这是个好问题。相机的原始流已经是jpeg格式,或者是转换为jpeg的另一种格式?是的,http内容类型为“image/jpeg”。您对注释字段的看法是正确的。但是经过一些验证,SDK(第三方)似乎没有使用这个字段。很高兴指出这一点。谢谢