如何在c#中读取带有位图类的1MB .tif文件

时间:2012-06-22 12:07:25

标签: c# image-processing

我遇到了麻烦。如何在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);

2 个答案:

答案 0 :(得分: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时代,你可以查看图像元数据来提取这些信息而不将整个图像加载到内存中,如following answer所示。

答案 1 :(得分:-2)

从1MB大小的文件创建一个Bitmap对象没有问题。它可以很容易地使用更大的图像。我尝试使用16MB的图像。你使用了大量不需要的代码。只需使用

Bitmap mybitmap=new Bitmap(path);