欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#快速获取图像大小和分辨率(shell32)

程序员文章站 2022-04-09 20:05:48
...

C#快速获取图像大小和分辨率(shell32)

昨天使用metadata-extractor获取图像和分辨率,对于绝大多数图片的提取没有问题,今天进行批量图片测试发现对于JPEG格式为连续扫描的图片,数据惨不忍睹,读取时间比Image类还慢一半,无法忍受。。
尝试使用shell32,读取文件信息。未进行大批量测试,先做个记录

VS中引用 .COM 中的 Microsoft Shell Controls and Automation 修改嵌入互操作类型为 False

然后 using Shell32

public static void GetJpgSizeByShell(string JpgPath, out Size JpgSize, out float Wpx, out float Hpx)
		{		
			var shell = new ShellClass();
			Folder der = shell.NameSpace(Path.GetDirectoryName(JpgPath));
			FolderItem item = der.ParseName(Path.GetFileName(JpgPath));
			JpgSize = new Size(0, 0);
			try
			{
				Wpx = float.Parse(Regex.Replace(der.GetDetailsOf(item, 161), @"[^0-9]+", ""));//水平分辨率
				int w = int.Parse(Regex.Replace(der.GetDetailsOf(item, 162), @"[^0-9]+", ""));//图片宽像素
				Hpx = float.Parse(Regex.Replace(der.GetDetailsOf(item, 163), @"[^0-9]+", ""));//垂直分辨率
				int h = int.Parse(Regex.Replace(der.GetDetailsOf(item, 164), @"[^0-9]+", ""));//图片高像素
				JpgSize.Width = w;
				JpgSize.Height = h;
			}
			catch
			{
				JpgSize = new Size(0, 0);
				Wpx = 0;
				Hpx = 0;
			}
		}
相关标签: JPG