C# 如何在不将图像文件加载到内存的情况下更改图像文件旋转状态

C# 如何在不将图像文件加载到内存的情况下更改图像文件旋转状态,c#,winforms,jpeg,exif,C#,Winforms,Jpeg,Exif,有人告诉我一些像jpg这样的图像文件只是使用一些位来控制旋转状态 是否有任何方法可以在不将图片文件加载到主存的情况下更改此状态可以标记JPG文件以更改其显示方式,而无需将JPG图像加载并解码到内存位图中。JPG图像文件可以选择性地包括EXIF元数据部分,通常用于描述创建或捕获图像所涉及的设备和环境-相机型号、快门速度、ISO曝光当量等 EXIF元数据还包括一个方向标志,可用于通知图像查看器应用程序JPG图像的像素在显示表面上的方向。可以在JPG文件中读取和写入该方向标志(以及EXIF元数据),而

有人告诉我一些像jpg这样的图像文件只是使用一些位来控制旋转状态


是否有任何方法可以在不将图片文件加载到主存的情况下更改此状态

可以标记JPG文件以更改其显示方式,而无需将JPG图像加载并解码到内存位图中。JPG图像文件可以选择性地包括EXIF元数据部分,通常用于描述创建或捕获图像所涉及的设备和环境-相机型号、快门速度、ISO曝光当量等

EXIF元数据还包括一个方向标志,可用于通知图像查看器应用程序JPG图像的像素在显示表面上的方向。可以在JPG文件中读取和写入该方向标志(以及EXIF元数据),而无需加载或解码像素图像数据。这也意味着可以在不丢失图像细节的情况下多次更改方向,因为图像不会被解压缩、旋转,然后重新压缩到磁盘上的新文件中

要做到这一点,您需要C#代码来读取JPG文件的JFIF文件格式,并查找和提取EXIF部分。我不认为内置的.NET图像阅读器提供了这样的功能

请注意,并非所有JPG阅读器都支持EXIF方向标志。我相信Windows内置的图像预览应用程序在当前版本的Windows中尊重EXIF方向标志,但在早期的Windows版本(如Windows XP)中没有


有关EXIF方向标志的更多信息,请参见此处:

但要查看实际旋转的图像,您需要查看者遵守此方向标志。。。有多少观众真的这么做了?我发现现在很多观众都支持方向标志。Windows Vista和Windows 7图像预览支持方向标志。当您在预览器中查看图像并更改其方向时,它会在不丢失图像细节的情况下执行此操作-在我看来,这听起来像是在修改EXIF方向标志。我怀疑.NET Image类在将JPG文件加载到内存位图中时可能会遵守方向标志,但我还没有对其进行测试。