2014-05-22 1 views
0

문제점이 정확히 무엇인지 알 수 없습니다. 작은 jpeg 파일을로드 할 수 있지만 tga 파일을로드하려고하면 예외가 발생합니다. 이미지의 크기를 조정하려고했지만 어느 쪽도 도움이되지 않았습니다.C에서 1MB의 tga 파일을로드 할 때 OutOfMemoryException이 발생합니다 #

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; 
     } 
} 
} 

} 

그래서, 질문은, 어떻게 이미지를로드 할입니까?

+3

['System.Drawing.Image.FromFile'] (http://msdn.microsoft.com/en-us/library/stf701f5.aspx)의 문서에서 : 파일에 a가 없으면 OutOfMemoryException이 발생합니다. 유효한 이미지 형식. -or- GDI +는 파일의 픽셀 형식을 지원하지 않습니다. –

+0

체크 가치 : [메모리 부족 Image.FromFile] (http://stackoverflow.com/a/8285521/352101) – Bolu

+0

@Tim - 맞춤 제작 라이브러리 사용과 별도로 TGA 파일을로드 할 수 있습니까? – Paul

답변

4

OutOfMemoryException은로드 할 수없는 파일 (예 : 손상된 파일 또는 지원되지 않는 픽셀 형식 등)을 거부하는 일반적인 방법입니다. 예외는 매우 혼란스럽고 아마도 GDI +와 관련이 있습니다. 파일의 크기는 전혀 중요하지 않습니다.

이 MSDN 페이지

참조 예외 섹션 (! 당신이 그것을 열 수있는 경우) http://msdn.microsoft.com/en-us/library/stf701f5.aspx

문제가 하나의 이미지에 발생하는 경우, 당신은 더 허용 그래픽 디자인 도구를 사용하여 이미지를 다시 저장하려고 할 수 있습니다 GDI +를 사용하지 않는 네이티브 .Net 메서드보다 다른 그림 처리 라이브러리를 사용해 볼 수도 있습니다.

AFAIK, 대부분의 경우 예외가 발생하면 그림의로드를 강제하는 직접적인 간단한 해결책이 없습니다.

+0

@Tim이 주석 처리 한 것과 마찬가지로 .NET Framework는 .tga 파일을 지원하지 않습니다 – Paul

+0

전혀 아니십니까? 나는 그 사실을 모르고 있었고 아마도 그것을 시도하지 않았을 것입니다. 그러나 내 답변의 모든 조언은 관련성이 있습니다. – AFract

관련 문제