1

画像の高さと幅を取得したいのですが、現在、私が行っているのは

Bitmap b=new Bitmap(path);
w=b.width;h=b.height;

ビットマップオブジェクトを作成して破棄せずに、したがってメモリを無駄にせずにそれを行うためのより良い方法はありますか?

4

2 に答える 2

1

以下のリファレンスから、.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画像タイプで機能します。

于 2012-06-23T10:07:25.307 に答える
1

これは、System.Drawingnamspaceを使用すると役立つ場合があります

 System.Drawing.Image objImage = System.Drawing.Image.FromFile(Filepath);
            imageWidth = objImage.Width;
            imageHeight = objImage.Height; 
于 2014-09-13T11:19:38.760 に答える