質問

している問題の記憶がようにしている負荷の少数の画像を一つのpicturebox.

public void button2_Click(object sender, EventArgs e)
    {


        FolderBrowserDialog dialog = new FolderBrowserDialog();
        dialog.ShowDialog();
        string selected = dialog.SelectedPath;

        string[] imageFileList = Directory.GetFiles(selected);


        int iCtr = 0,zCtr = 0;
        foreach(string imageFile in imageFileList)
        {

            if (Image.FromFile(imageFile) != null)
            {
                Image.FromFile(imageFile).Dispose();
            }

            PictureBox eachPictureBox = new PictureBox();

            eachPictureBox.Size = new Size(100,100);
           // if (iCtr % 8 == 0)
            //{
             //   zCtr++;
              //  iCtr = 0;
            //}
            eachPictureBox.Location = new Point(iCtr * 100 + 1, 1);
            eachPictureBox.Image = Image.FromFile(imageFile);
            iCtr++;

            panel1.Controls.Add(eachPictureBox);

        }


    }`enter code here`
役に立ちましたか?

解決

if (Image.FromFile(imageFile) != null)
{
    Image.FromFile(imageFile).Dispose();
}

悪いです。ま荷の画像からのファイルをチェックした場合、結果はnullにな...それを用意しておけば再度新しい結果できるように処理します。後者部分が愚かでないもなります。最初の部分には、しかし、この結果、 Image い適切に処分場の場合、GCに収集しました個人情報については、finalizerの Image タイプ すべ 処理のポリシー資源が、これは賢明なことを頼りにします。

ちなみに、 Image.FromFile は戻らない null.できないものであれば、読み、画像、そのスローする OutOfMemoryException.

またこのコードが表示されなかありません else ブロックな意義を if ブロックです。

私がおこなえ OutOfMemoryException ですから、そのファイルとディレクトリに格納され、破損もしくは対応画像フォーマット, やな画像です。

試しに置き換えコード foreach この:

try
{
    Image image = Image.FromFile(imageFile);

    PictureBox eachPictureBox = new PictureBox();

    eachPictureBox.Size = new Size(100,100);

    eachPictureBox.Location = new Point(iCtr * 100 + 1, 1);
    eachPictureBox.Image = Image.FromFile(imageFile);
    iCtr++;

    panel1.Controls.Add(eachPictureBox);
}
catch(OutOfMemoryException) { } // skip the file

他のヒント

ピクチャボックスは、内部的にあなたがそれに置くビットマップへの参照を保持しています。あなたがピクチャボックスを取り除く場合を除き、それはあなたがそれにロードごとにビットマップへの参照を保持しています。

あなたは絵がビットマップになると表示されたピクセルあたり4バイトが必要になります表示のためにそれを開くと、その関係なく、ディスク上に保存された画像の種類を考慮する必要があります。

何か

あなたのコードでは、サムネイル操作の試みを示唆しているようです。あなたは、メモリに実際の負荷で70個のファイルであり、表示サイズに関係なく、メモリに彼らは非常に大きくなります。

たとえばあなたが32ビットの色深度で70枚のJPEGファイルを持っていると言うと、サイズが1920×1080ピクセルをしましょう。すべてを一度に、その多くの画像をロードするためにあなたのメモリ要件があります:

 70 pics x 1920 pixels x 1080 pixels x 4 bytes/pixel = 580,608,000 bytes! 

そして、それはかなり低い見積もりです。

あなたは多くの少数の写真をロードしたり、実際のサムネイルソリューションをしようとして検討することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top