簡體   English   中英

在C#中加載1 mb的tga文件時獲取OutOfMemoryException

[英]Getting OutOfMemoryException when I load a tga file of 1 mb in c#

我不知道問題到底出在哪里。 我可以加載小的jpeg文件,但是當我嘗試加載tga文件時,出現異常。 我嘗試調整圖像的大小,但這也無濟於事。

public static System.Drawing.Image resizeImage(System.Drawing.Image imgToResize, Size size)
{
    return (System.Drawing.Image)(new Bitmap(imgToResize, size));
}

private void imageToolStripMenuItem4_Click(object sender, EventArgs e)
{

    if (tabControl1.TabCount == 0)
    {
        MessageBox.Show("Please add a form first");
        return;
    }

    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    openFileDialog1.Filter = "TGA (*.tga)|*.tga|JPEG (*.jpg)|*.jpg|BITMAP FILES (*.bmp)|*.bmp|PNG (*.png)|*.png";
    openFileDialog1.FilterIndex = 1;

    if (System.Windows.Forms.DialogResult.OK == openFileDialog1.ShowDialog())
    {
        BckImageRadioBtnGrp bimrbg=new BckImageRadioBtnGrp();
        bimrbg.ShowDialog();

        string result = bimrbg.getResult();

        if (result != null)
        {
            switch (result)
            {
                case "Center"   : (GetDesignSurface(tabControl1.SelectedTab) as System.Windows.Forms.UserControl).BackgroundImageLayout = ImageLayout.Center;   break;
                case "Zoom"     : (GetDesignSurface(tabControl1.SelectedTab) as System.Windows.Forms.UserControl).BackgroundImageLayout = ImageLayout.Zoom;     break;
                case "Tile"     : (GetDesignSurface(tabControl1.SelectedTab) as System.Windows.Forms.UserControl).BackgroundImageLayout = ImageLayout.Tile;     break;
                case "Stretch"  : (GetDesignSurface(tabControl1.SelectedTab) as System.Windows.Forms.UserControl).BackgroundImageLayout = ImageLayout.Stretch;  break;
                case "None"     : (GetDesignSurface(tabControl1.SelectedTab) as System.Windows.Forms.UserControl).BackgroundImageLayout = ImageLayout.None;     break;
            }
        }

         //getting exception here. I set a small resizing size just for testing if it works. it doesn't
        System.Drawing.Image img = resizeImage(System.Drawing.Image.FromFile(openFileDialog1.FileName), new Size(100, 100));

        (GetDesignSurface(tabControl1.SelectedTab) as System.Windows.Forms.UserControl).BackgroundImage = img;
        }
}
}

}

因此,問題是,如何加載圖像?

OutOfMemoryException是System.Drawing.Image.FromFile拒絕可卸載文件(例如,損壞的文件或不受支持的像素格式等)的典型方式。該異常非常令人困惑,可能與GDI +有關。 文件的大小根本不重要。

請參閱此MSDN頁面上的異常部分: http : //msdn.microsoft.com/zh-cn/library/stf701f5.aspx

如果問題是在單個圖像上發生的,則可以嘗試使用更寬松的圖形設計工具(如果可以打開!)來重新保存圖像,或者可以嘗試使用本機.Net方法之外的其他圖片處理庫。不依賴GDI +。

AFAIK,在大多數情況下,發生異常時,沒有直接簡單的解決方案可以“強制”加載圖片。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM