我知道如何获得图像的大小(x,y)
Image.FromFile("cat.jpg").Size
但这需要从内存加载图像.
当我在Windows资源管理器中查看图像时,它显示了我的大小.
我如何访问该大小?
所有图像都可靠吗?Windows资源管理器是否需要首先"看到"图像以获得可用的大小.在将其加载到Internet Explorer之前,我不想上传到服务器并且没有可用的元数据.
编辑:我将主题从"尺寸"更改为"尺寸",以阐明我想要的尺寸.
您可以使用Image.FromStream(Stream, bool, bool)
"false"第二和第三个参数来避免将文件加载到内存中.
如果你想在不加载图像的情况下获得图像尺寸(宽度和高度),你需要自己阅读jpeg文件的某些部分,如下所示.
这是一个开箱即用的方法:)
public static Size GetJpegImageSize(string filename) { FileStream stream=null; BinaryReader rdr=null; try { stream=File.OpenRead(filename); rdr=new BinaryReader(stream); // keep reading packets until we find one that contains Size info for(; ; ) { byte code=rdr.ReadByte(); if(code!=0xFF) throw new ApplicationException( "Unexpected value in file "+filename); code=rdr.ReadByte(); switch(code) { // filler byte case 0xFF: stream.Position--; break; // packets without data case 0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4: case 0xD5: case 0xD6: case 0xD7: case 0xD8: case 0xD9: break; // packets with size information case 0xC0: case 0xC1: case 0xC2: case 0xC3: case 0xC4: case 0xC5: case 0xC6: case 0xC7: case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF: ReadBEUshort(rdr); rdr.ReadByte(); ushort h=ReadBEUshort(rdr); ushort w=ReadBEUshort(rdr); return new Size(w, h); // irrelevant variable-length packets default: int len=ReadBEUshort(rdr); stream.Position+=len-2; break; } } } finally { if(rdr!=null) rdr.Close(); if(stream!=null) stream.Close(); } } private static ushort ReadBEUshort(BinaryReader rdr) { ushort hi=rdr.ReadByte(); hi<<=8; ushort lo=rdr.ReadByte(); return (ushort)(hi|lo); }
这不是我的代码,在代码项目中得到这个例子.我复制并保存到我的实用程序片段,但不记得链接了.