4

我有麻烦了。如何在 C# 中使用位图类读取 1MB .tif 文件。我使用了下面的代码,但出现错误“内存不足”。我搜索了谷歌很多但还没有找到任何答案。

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
            );
        }
    }
}

如果由于某种原因您停留在某个 pre-.NET 3.0 时代,您可以查看图像元数据以提取此信息,而无需将整个图像加载到内存中,如以下答案所示。

于 2012-06-22T12:41:21.983 回答
-2

从 1MB 大小的文件创建位图对象没有问题。它可以轻松处理更大的图像。我尝试使用 16MB 的图像。您使用了很多不需要的代码。只需使用

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