2

如何将Image对象插入FileInfo列表?

我有一个包含此类图像的列表

public  List<FileInfo> _imagesList = new List<FileInfo>();

但我需要使用这样的方法将图像添加到此列表中:

public void AddImage(Image img)
{

}

我尝试使用这种方法

 public void AddImage(string pathToImage)
    {
        try
        {
            FileInfo file = new FileInfo(pathToImage);
                 _imagesList.Add(file);
        }
        catch (Exception e)
        {
            MessageBox.Show("Не удалось загрузить изображение. Ошибка : " + e);
        }

    }
4

3 回答 3

1

让我解释一下为什么你不能这样做Image类没有对用于创建该图像的文件的任何引用。当您创建Image实例时

Image.FromFile(filename)

文件名不存储在任何地方。您将在Image实例内部拥有一个字节数组,以这种方式初始化:

Stream dataStream = File.OpenRead(filename);
image.rawData = new byte[(int) dataStream.Length];
dataStream.Read(image.rawData, 0, (int) dataStream.Length);

所以,关键是 - 你不能得到Image创建的文件名。实际上图像可以不是从文件创建 - 从任何流(网络流,内存流)。Image与任何文件无关,因此您不能将其插入FileInfo对象列表。

好吧,作为一种解决方法,您可以保存Image到文件。然后将该文件插入到列表中。

于 2013-08-19T12:14:38.240 回答
0

您不能这样做,FileInfo在其构造函数中接受一个参数:fileName.

你应该有这样的东西:

public  List<FileInfo> _imagesList = new List<FileInfo>();

public void Main()
{
   AddImage("YourImagePath1");
   AddImage("YourImagePath2");
   // ...
}

public void AddImage(string path)
{
   _imagesList.Add(new FileInfo(path));
   //var img = Image.FromFile(path); // do this if you need to load your image
}

更新:

你改变了你的问题,你的代码现在看起来像我的,你以前的代码有什么问题?

于 2013-08-19T11:43:51.803 回答
0

您可以使用您提供的方法,添加new FileInfo(pathToImage)或更改您的列表,使其包含Image项目

您可以使用

public  List<Image> _imagesList = new List<Image>();

例如。如果您分享更多信息,我可以为您提供更多帮助。这看起来像一个 XY 问题,所以也许你应该告诉我们真正的问题是什么

于 2013-08-19T11:44:51.647 回答