我想在没有打开的情况下在磁盘上找到图像的高度/宽度,如果可能的话(出于性能原因)。
图像的Windows属性窗格包含宽度,高度,位深度等信息,这使我相信它正在某处存储元数据。如何访问此信息?
答案 0 :(得分: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"));
答案 1 :(得分:4)
实现此目的的最简单方法是,假设图像是正方形,则采用文件大小(以字节为单位)并取平方根。这将是你的宽度和高度。
256 bytes = 16px x 16px
或者,您可以尝试使用此codeplex library
阅读图片的EXIF信息答案 2 :(得分:4)
有一些关于如何从图像中读取EXIF信息的stackoverflow问题,例如:How to get the EXIF data from a file using C#
答案 3 :(得分:2)
Windows不会将(此)元数据存储在文件系统的任何特殊位置; “属性”窗口只是从图像文件本身读取它们。
我认为.NET不提供任何功能,只需从图像中读取元数据而不加载整个图像。如果您只处理有限数量的不同图像格式(例如只有JPEG,PNG和GIF),那么从图像标题中读取图像大小应该不会太难。
另一方面,如果您必须处理许多图像格式,也许您可以查看Unix file
utility的源代码。它设法检测许多不同图像格式的大小,并且启动速度极快。
答案 4 :(得分:2)
为了获得图像的宽度和高度(基本上,就像你所说的那样,元数据)你将必须打开文件,解析某种标题信息并获取你的内容想那样。
您不必阅读所有颜色/位图信息,只需阅读标题。
这与Windows能够从应用程序文件加载图标而不实际执行它们的方式相同。
答案 5 :(得分:2)
答案 6 :(得分:0)
要阅读Windows资源管理器显示的属性,您可以使用 Microsoft Shell控件和自动化组件。这样做的好处是您不需要任何第三方库(COM对象已经存在)或用于解析图像标题的其他代码,并且它可以使用各种格式。
示例代码可以在related question的答案中找到。