我想获取图像的高度和宽度。目前我正在做的是
Bitmap b=new Bitmap(path);
w=b.width;h=b.height;
有没有更好的方法来做到这一点,而无需创建和处置 Bitmap 对象,从而不浪费内存。
从下面的参考资料看来,.NET 2.0 类库中没有它的功能。下面的代码块应该可以工作,
目前没有错误检查或任何其他验证,它通常不会从图像中读取超过 6K,具体取决于 EXIF 数据量。
using System;
using System.IO;
namespace Test
{
class Program
{
static bool GetJpegDimension(
string fileName,
out int width,
out int height)
{
width = height = 0;
bool found = false;
bool eof = false;
FileStream stream = new FileStream(
fileName,
FileMode.Open,
FileAccess.Read);
BinaryReader reader = new BinaryReader(stream);
while (!found || eof)
{
// read 0xFF and the type
reader.ReadByte();
byte type = reader.ReadByte();
// get length
int len = 0;
switch (type)
{
// start and end of the image
case 0xD8:
case 0xD9:
len = 0;
break;
// restart interval
case 0xDD:
len = 2;
break;
// the next two bytes is the length
default:
int lenHi = reader.ReadByte();
int lenLo = reader.ReadByte();
len = (lenHi << 8 | lenLo) - 2;
break;
}
// EOF?
if (type == 0xD9)
eof = true;
// process the data
if (len > 0)
{
// read the data
byte[] data = reader.ReadBytes(len);
// this is what we are looking for
if (type == 0xC0)
{
width = data[1] << 8 | data[2];
height = data[3] << 8 | data[4];
found = true;
}
}
}
reader.Close();
stream.Close();
return found;
}
static void Main(string[] args)
{
foreach (string file in Directory.GetFiles(args[0]))
{
int w, h;
GetJpegDimension(file, out w, out h);
System.Console.WriteLine(file + ": " + w + " x " + h);
}
}
}
}
读取图像标题以获取宽度和高度适用于 JPG、GIF、PNG 和 BMP 图像类型。
这可能会有所帮助,使用 System.Drawing 命名空间
System.Drawing.Image objImage = System.Drawing.Image.FromFile(Filepath);
imageWidth = objImage.Width;
imageHeight = objImage.Height;