|
프로그램을 실행시키실때 Window의 작업관리자를 띄어 놓고
GDI객체가 얼마만큼 늘어 나는지 살펴보십시요.
GDI객체가 10,000을 넘어갈때 프로그램은 에러를 발생시키게 됩니다.
만약 GDI객체가 10,000을 넘어간다면 다음 두 개의 함수로 GDI객체 와
캐시된 이미지를 삭제하는 식으로 프로그램을 짜보세요.
Bitmap->Dormant();
Bitmap->FreeImage();
Blankas 님이 쓰신 글 :
: 안녕하세요?
: 이미지 제어를 잘 못하다보니 오류가 자꾸 발생해서요.. 이렇게 글을 적어올립니다. ㅠ_ㅠ
: 상황은 이렇습니다;;
:
: 먼저 Form1에 TImage 타입의 Image1을 만들고, 크기를 Width=500, Height=3000으로 선언했습니다.
: 여기까지는 콤포넌트를 직접 끌어놓아 만들었구요,
: 실제 코딩은 Form1의 OnActivate() 이벤트에 다음과 같이 했습니다.
:
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormActivate(TObject *Sender)
: {
: Graphics::TBitmap *TempBuffer;
:
: TempBuffer=new Graphics::TBitmap;
: TempBuffer->LoadFromFile("c:\\dot.bmp");
: Image1->Canvas->CopyRect(Rect(100, 100, 101, 2500), TempBuffer->Canvas, TempBuffer->Canvas->ClipRect);
:
: if(TempBuffer!=NULL)
: {
: delete TempBuffer;
: TempBuffer=NULL;
: }
: }
: //---------------------------------------------------------------------------
:
:
: dot.bmp라는 이미지는 1X1 크기의 파란색 점입니다. 이 점을 길이 2500짜리 라인으로 그으려는 것입니다.
: 위의 내용을 실행하면 치명적인 오류가 발생하면서 프로그램이 정지합니다.
: 제가 윈도우 프로그래밍에 굉장히 취약하다보니 이유를 모르겠네요;;;
: 헬프만 보고 해본거라 TBitmap이나 Canvas의 사용에 문제가 있는 것인지도 모르겠습니다;;;
:
:
: 그럼 고수분들의 도움을 기다리겠습니다. ㅠ_ㅠ
:
:
:
:
: 추.
: 상황을 보면 라인의 길이가 2000을 넘어갈 때 오류가 나는것 같습니다.
: 아마도 메모리 경계를 넘어가는게 아닐까 하고 있습니다요;;;;
:
|