VCL 사용법과 FMX 사용법이 차이가 있어서 막히는 부분이 많네요..
일단 해결 방법은 아래 사용된 Map_Draw(TImage* Map_Image) 함수를 호출하기 전에
파라메타로 전달되는 TImage 의 Bitmap 멤버의 객체를 생성해 주어야 합니다.
Image1->Bitmap = new TBitmap(Image1->Width, Image1->Height) ;
Map_Draw(Image1) ;
김시환 님이 쓰신 글 :
: 파이어몽키로 앱 개발 공부를 좀 해 볼까 하여 간단한 프로그램을 하나 해 보고 있습니다.
:
: TImage 컴포넌트에 Map 형태로 스프라이트 이미지를 뿌려 보려고 하는데
: "object lock not owned." 이라는 에러가 아래 소스의 Map_Image->Bitmap->Canvas->EndScene() ; 에서 발생합니다.
:
: 하나 특이한건 빌더 XE4 버젼에서 파이어 몽키로 돌리면 정상적으로 동작을 하는데
: 빌더 10.2 도쿄 커뮤니티 버젼에서만 해당에러가 발생합니다.
: 서로 다른 PC에 각각 XE4 와 10.2 도쿄 버젼이 설치되어 있는데 도쿄 버젼에서만 에러가 발생합니다.
:
: 구글링을 해 봐도 뚜렷이 원인에 대한 해결책이 별로 보이지가 않네요..
:
: void __fastcall GameMap::Map_Draw(TImage* Map_Image)
: {
: TBitmap* imagefile1 = new TBitmap(32,32) ;
: TBitmap* imagefile2 = new TBitmap(32,32) ;
:
: Load_Image_From_Resource(imagefile1, L"Bitmap_1") ;
: Load_Image_From_Resource(imagefile2, L"Bitmap_2") ;
:
: try
: {
: Map_Image->Bitmap->Canvas->BeginScene() ;
:
: for(int row=0 ; row<10 ; row++)
: {
: for(int col=0 ; col<10 ; col++)
: {
: switch(Mapping_Data[col][row])
: {
: case 1: Map_Image->Bitmap->Canvas->DrawBitmap(imagefile1, TRect(0,0,32,32), TRect(col*32,row*32,(col*32)+32,(row*32)+32), 1, true) ; break ;
: case 2: Map_Image->Bitmap->Canvas->DrawBitmap(imagefile2, TRect(0,0,32,32), TRect(col*32,row*32,(col*32)+32,(row*32)+32), 1, true) ; break ;
: }
: }
: }
: }
: __finally
: {
: delete imagefile1 ;
: delete imagefile2 ;
:
: Map_Image->Bitmap->Canvas->EndScene() ; // 해당오류가 나는 위치 입니다.
: }
: }
:
|