画像の高さと幅を取得したいのですが、現在、私が行っているのは
Bitmap b=new Bitmap(path);
w=b.width;h=b.height;
ビットマップオブジェクトを作成して破棄せずに、したがってメモリを無駄にせずにそれを行うためのより良い方法はありますか?
以下のリファレンスから、.NET2.0クラスライブラリにはその機能がないようです。以下のコードブロックが機能するはずです、
現在、エラーチェックやその他の検証は行われていません。通常、EXIFデータの量によっては、画像から6Kを超える値を読み取ることはありません。
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.Drawingnamspaceを使用すると役立つ場合があります
System.Drawing.Image objImage = System.Drawing.Image.FromFile(Filepath);
imageWidth = objImage.Width;
imageHeight = objImage.Height;