4


0

コードで画像ファイルを画像リストに追加するにはどうすればよいですか?

画像リストがあり、画像のディレクトリをコード内の画像リストに追加したいと思います。 どのようにこれをしますか? コードを実行すると:

'Load all of the items from the imagelist
For Each path As String In Directory.GetFiles("Images\LanguageIcons\")
     imlLanguagesIcons.Images.Add(Image.FromFile(path))
Next

メモリ不足の例外が発生します。 現在、画像は14個しかないため、実際には問題はないはずです。 何か手助け?

3 Answer


2


このような

imageList.Images.Add(someImage);

ここで、「someImage」は「Image」変数です。

編集:こんな感じ:

For Each path As String In Directory.GetFiles("Images\LanguageIcons")
    imageList.Images.Add(Image.FromFile(path))
Next


2


image.Dispose()はメモリ不足の例外を修正します。 私が使用した詳細なアプローチは次のとおりです(一部の人にとってはやり過ぎです):

        ImageList galleryList = new ImageList();

        string[] GalleryArray = System.IO.Directory.GetFiles(txtSourceDir.Text);    //create array of files in directory
        galleryList.ImageSize = new Size(96, 64);
        galleryList.ColorDepth = ColorDepth.Depth32Bit;

        for (int i = 0; i < GalleryArray.Length; i++)
        {
            if (GalleryArray[i].Contains(".jpg"))   //test if the file is an image
            {
                var tempImage = Image.FromFile(GalleryArray[i]); //Load the image from directory location
                Bitmap pic = new Bitmap(96, 64);
                using (Graphics g = Graphics.FromImage(pic))
                {
                    g.DrawImage(tempImage, new Rectangle(0, 0, pic.Width, pic.Height)); //redraw smaller image
                }
                galleryList.Images.Add(pic);    //add new image to imageList
                tempImage.Dispose();    //after adding to the list, dispose image out of memory
            }

        }

        lstGallery.View = View.LargeIcon;
        lstGallery.LargeImageList = galleryList;    //set imageList to listView

        for (int i = 0; i < galleryList.Images.Count; i++)
        {
            ListViewItem item = new ListViewItem();
            item.ImageIndex = i;
            lstGallery.Items.Add(item); //add images in sequential order
        }


1


_ Image.FromFileのドキュメント(FromStreamに関連)は、ファイルが有効な画像形式でない場合、またはGDI +がピクセル形式をサポートしていない場合、OutOfMemoryExceptionをスローすることを示しています。 サポートされていない画像タイプをロードしようとしている可能性はありますか? _

出典:Jim Mischel https://stackoverflow.com/questions/4853615/out-of-memory-exception-while-loading-images [画像の読み込み中にメモリ不足の例外]

これが私の方法です:

///
/// Loads every image from the folder specified as param.
///
/// Path to the directory from which you want to load images.
/// NOTE: this method will throws exceptions if the argument causes
/// Directory.GetFiles(path) to throw an exception.
/// An ImageList, if no files are found, it'll be empty (not null).
public static ImageList InitImageListFromDirectory(string pDirectory)
{
    ImageList imageList = new ImageList();

    foreach (string f in System.IO.Directory.GetFiles(pDirectory))
    {
        try
        {
            Image img = Image.FromFile(f);
            imageList.Images.Add(img);
        }
        catch
        {
            // Out of Memory Exceptions are thrown in Image.FromFile if you pass in a non-image file.
        }
    }

    return imageList;
}