|
슬.강슬기 님이 쓰신 글 :
: 간단한 이미지 뷰어를 만들고 있는데요
:
: 다음 이미지를 미리 읽어와서
: 이미지 로딩하는 시간을 단축시켜 보려고합니다.
:
: 스왑버퍼란는 말 뜻이 맞는지는 모르겠는데요^^;;;
:
: 현재 TImage 컨트롤 두개를 두고,
:
:
: 한장을 미리 읽어온 다음 버튼을 누르면
: 아래와 같이 두장을 바꿔치기 합니다.
:
: Image->Visible = false;
:
: tmpImage = Image;
: Image = ImageSwap;
: ImageSwap = tmpImage;
:
: Image->Visible = true;
:
: 바꿔치기 한뒤에
: 아래와 같이 바로 다음 이미지를 Thread를 이용하여 ImageSwap 에 읽어 오는데,
:
: TImageLoader* ImageLoader = new TImageLoader(ImageSwap,strFile);
:
: 스레드가 종료된 다음 위의 스왑 구문이 처리된다는게 문제입니다..
: 이미지가 큰 경우는 스레드를 쓰기 전 아래의 코드와 속도가 거의 동일하네요^^;;
: 사실상 스레드가 무의미 해졌네요.
:
: Image->Picture->LoadFromFile(m_strImageFile);
:
: 스레드 내부의 Excute() 소스는
:
: void __fastcall TImageLoader::Execute()
: {
: Image->Picture->LoadFromFile(m_strImageFile);
: Synchronize(&Swap);
: }
:
: 다음과 같이 되있습니다.
: Image 와 strImageFile 에서는
: 생성자로 초기화 하고 있구요.
:
: 기본적인 문제는 파악하고 있습니다.
:
: Thread 의 Excute() 안에 vcl 클래스가 쓰이는것...
:
: 제가 쓰는 방법에 문제가 있는지 궁금합니다.
:
: 해결책이 있다면 어떤것이 있을지...
: (GDI+,Graphi32를 이용하면 될까요?)
:
: 하나 더 궁금한것은
: 만약 GDI+ 로 구현한다고 할때..
: Image->Canvas->Handle 를 가지고
: Drawing 한다면...
: 이것은 제가 원하는 대로 작동할까요?
:
:
: 아, 한가지 더 ^^;;
:
: GDI+를 써서 직접 테스트 해보고 싶었는데
:
: GDI+를 이용한 이미지 로딩의 간단한 프로그램을 작성해봤습니다.
:
: Gdiplus::GdiplusStartupInput gdiplusStartupInput;
: ULONG_PTR gdiplusToken;
:
: // Initialize GDI+.
: GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
:
: Gdiplus::Graphics graphics(Image1->Canvas->Handle);
:
: // Use GDI+
: Gdiplus::Image img(L"c:\\test.jpg");// = new Gdiplus::Image(ws.c_bstr());
: graphics.DrawImage(&img,0,0);
:
: // shutdown GDI+
: Gdiplus::GdiplusShutdown(gdiplusToken);
:
: 위의 내용을 컴파일 하면
: [Linker Error] Unresolved external 'GdipFree' referenced from
: 이것과 같이 링커 에러가 납니다;;;
: 링커 에러만 뜨면 막막하다는....
:
: 사실 제가 직접 테스트 해보고 싶었는데 GDI+를 처음 사용해봐서요^^;;;
:
: 고수님들의 조언 부탁드리겠습니다.
:
: Conditional Define 에 STRICT 를 추가 했구요,
gdiplus.lib 를 연결 안해서 링커 에러가 났었군요-_-;;;
|