9

如果可能(出于性能原因),我想在不打开磁盘的情况下找到图像的高度/宽度。

图像的 Windows 属性窗格包含宽度、高度、位深度等信息,这让我相信它正在将元数据存储在文件的某个位置。我怎样才能访问这些信息?

4

7 回答 7

5

使用 System.Drawing.Image 类。

        Image img = Image.FromFile(fileName);
        ImageFormat format = img.RawFormat;
        Console.WriteLine("Image Type : "+format.ToString());
        Console.WriteLine("Image width : "+img.Width);
        Console.WriteLine("Image height : "+img.Height);
        Console.WriteLine("Image resolution : "+(img.VerticalResolution*img.HorizontalResolution));

        Console.WriteLine("Image Pixel depth : "+Image.GetPixelFormatSize(img.PixelFormat));
        Console.WriteLine("Image Creation Date : "+creation.ToString("yyyy-MM-dd"));
        Console.WriteLine("Image Creation Time : "+creation.ToString("hh:mm:ss"));
        Console.WriteLine("Image Modification Date : "+modify.ToString("yyyy-MM-dd"));
        Console.WriteLine("Image Modification Time : "+modify.ToString("hh:mm:ss"));
于 2010-12-24T04:39:04.590 回答
4

实现这一点的最简单方法是,假设图像是方形的,则以字节为单位取文件大小并取平方根。这将是您的宽度和高度。

256 bytes = 16px x 16px

:-)

或者,您可以尝试使用此codeplex 库读取图像的 EXIF 信息

于 2009-07-28T18:18:01.037 回答
4

关于如何从图像中读取 EXIF 信息有一些 stackoverflow 问题,例如:How to get the EXIF data from a file using C#

于 2009-07-28T18:19:09.163 回答
2

Windows 不会将(此)元数据存储在文件系统中的任何特殊位置;属性窗口只是从图像文件本身中读取它们。

我不认为 .NET 提供任何功能来从图像中读取元数据而不加载整个图像。如果您只处理有限数量的不同图像格式(例如,只有 JPEG、PNG 和 GIF),那么您自己从图像标题中读取大小应该不会太难。

另一方面,如果您必须处理许多图像格式,也许您可​​以查看Unixfile实用程序的源代码。它设法检测许多不同图像格式的大小,并且启动速度非常快。

于 2009-07-28T18:21:11.403 回答
2

为了获得图像的宽度和高度(本质上,如您所说,元数据),您必须打开文件,解析某种标题信息并以这种方式获得所需的内容。

您不必阅读所有颜色/位图信息,只需阅读标题。

这与 Windows 能够从应用程序文件加载图标而不实际执行它们的方式相同。

于 2009-07-28T18:22:05.180 回答
2

检查这个问题:

于 2009-07-28T18:22:57.937 回答
0

要读取 Windows 资源管理器显示的属性,您可以使用Microsoft Shell 控件和自动化组件。这样做的好处是您不需要任何第三方库(COM 对象已经存在)或用于解析图像标题的其他代码,并且它可以使用多种格式。

示例代码可以在相关问题的答案中找到。

于 2009-07-28T18:47:41.897 回答