2009-05-29 6 views
2

두 개의 양식 A와 B가 있습니다. 양식 A에서 단추를 클릭하고 양식 B에있는 PictureBox에 이미지를로드하고 있습니다. 그리고이 이미지로 GrayScale을 설정하려고합니다 :GrayScale (ColorMatrix 기준)은 OutOfMemoryException을 발생시킵니다. 왜?

public void SetGrayScale(PictureBox pb) 
    { 
     ColorMatrix matrix = new ColorMatrix(new float[][] 
     { 
      new float[] {0.299f, 0.299f, 0.299f, 0, 0}, 
      new float[] {0.587f, 0.587f, 0.587f, 0, 0}, 
      new float[] {0.114f, 0.114f, 0.114f, 0, 0}, 
      new float[] {  0,  0,  0, 1, 0}, 
      new float[] {  0,  0,  0, 0, 0} 
     }); 

     Image image = (Bitmap)pb.Image.Clone(); 

     ImageAttributes attributes = new ImageAttributes(); 
     attributes.SetColorMatrix(matrix); 

     Graphics graphics = Graphics.FromImage(image); 

     graphics.DrawImage(image, 
          new Rectangle(0, 0, image.Width, image.Height), 
          0, 
          0, 
          image.Width, 
          image.Height, 
          GraphicsUnit.Pixel, 
          attributes); 

     graphics.Dispose(); 

     pb.Image = image; 
    } 

이 코드는 PictureBox가 같은 양식 (A)에있을 때 제대로 작동합니다. 그러나 Form B에있을 때 OutOfMemoryException이 발생합니다. 왜 ?

+0

어디에서 OutOfMemoryException이 발생합니까? – ChrisF

+0

이미지가 pb 크기가 얼마나 큽니까? –

+0

@ 토니 : 매번 새로운 답변을 추가하는 대신 의견을 추가하여 질문이나 다른 답변에 대한 질문에 답변해야합니다. – OregonGhost

답변

1

더 질문/당신이 실제 대답보다는 조사하기 위해 물건 난 두려워 : 당신의 대답에 주석과 마찬가지로

  1. - 이미지 객체가 정확한지?

  2. 그렇지 않으면이 메서드에 전달 된 PictureBox 개체에 문제가 있거나 PictureBox의 이미지에 제대로 액세스 할 수 없음을 의미합니다.

첫 번째 생각은 스레딩 이었지만 두 양식 모두 UI 스레드에 있어야합니다.

0

좋아, 나는 그것을 :) 해결 방법은 을 고정했습니다, 나는 OpenDialog.FileName에서 비트 맵 객체를 생성했고, 나중에 설정 PictureBox.Image = myBitmap

나는 그것을하지 않았다 처음에는 PictureBox.Load (OpenDialog.FileName)를 설정하는 중이었습니다. 그리고 그것은 내 실수였습니다.

감사합니다. 협조 해 주셔서 감사합니다. ChrisF! :)

+0

다음 번에 예외 메시지의 세부 정보를 게시하십시오. –

관련 문제