4

私は困っています。c# でビットマップ クラスを使用して 1MB の .tif ファイルを読み取る方法。以下のコードを使用しましたが、「メモリ不足」というエラーが発生しました。Googleロットを検索しましたが、まだ答えが見つかりません。

string imgPath;
            imgPath = @"C:\Documents and Settings\shree\Desktop\2012.06.09.15.35.42.2320.tif";
            Image newImage = Image.FromFile(imgPath);

            Bitmap img;
            img = new Bitmap(imgPath, true);

            MessageBox.Show("Width: "+ img.Width + " Height: " + img.Height);
4

2 に答える 2

2

メモリにロードせずにファイルの幅と高さを読み取る必要がある場合は、WPF のBitmapDecoderクラスを使用できます。

using System;
using System.IO;
using System.Linq;
using System.Windows.Media.Imaging;

class Program
{
    static void Main()
    {
        using (var stream = File.OpenRead(@"c:\work\some_huge_image.tif"))
        {
            var decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.None);
            var frame = decoder.Frames.First();
            Console.WriteLine(
                "width: {0}, height: {1}", 
                frame.PixelWidth, 
                frame.PixelHeight
            );
        }
    }
}

何らかの理由で .NET 3.0 より前の時代に行き詰まっている場合は、次の回答に示すように、イメージ全体をメモリにロードすることなく、イメージ メタデータを調べてこの情報を抽出できます。

于 2012-06-22T12:41:21.983 に答える
-2

1MBサイズのファイルからビットマップオブジェクトを作成するのに問題はありません。はるかに大きな画像でも簡単に動作します。16MBの画像で試しました。不要なコードをたくさん使用しています。使用するだけです。

Bitmap mybitmap=new Bitmap(path);
于 2012-06-22T12:49:28.017 に答える