제가 예전에 개발했던 프로그램이 화면에 선,원, 사각형등을 그리는 것이 있었는데 그때 제 경우에는 TImage 컴포넌트의 Canvas에 그냥 그려도 그다지 속도에 문제는 없었습니다.
선의 경우 마우스를 버튼을 누른 상태에서 움직이면 처음 누른 점에서 마우스 이동에 따라 선의 위치가 변하다가 버튼을 놓는 순간 선이
확정되고 사각형이나 원도 동일하게 화면상에 마우스 움직임에 따라 크기가 변하다가 버튼을 놓으면 확정되는 그러한 형태였습니다.
Image2->Canvas->MoveTo(tempx1, abs(y_pos-Image1->Height)) ;
Image2->Canvas->LineTo(m_x[0], abs(m_y[0]-Image1->Height)) ;
하지만 픽셀단위의 컬러값을 조정하는 방식으로 범위가 큰 영역을 변경할 경우 더블버퍼링 방식으로 처리하셔야 속도가 나옵니다.
그렇지 않으면 상당히 느려집니다.
인터넷에 더블버퍼링을 찾아 보시면 잘 나와있을 텐데요..
기본적으로 Backbuffer 를 아래 처럼 생생해 주시고
Graphics::TBitmap *BackBuffer = new Graphics::TBitmap();
BackBuffer->Width = WAFER_WIDTH ;
BackBuffer->Height = WAFER_HEIGHT ;
BackBuffer 에 원하는 형태로 그림을 그리고
Image1->Picture->Bitmap->Assign(BackBuffer) ;
형식으로 처리하시면 빠르게 처리가 됩니다.
Assign(BackBuffer) ; <-- BitBlt 와 동일한 역할을 하는데 BitBlt의 경우 크기와 위치를 설정할 수 있는 반면에 Assign은 전체영역을 다 뒤집어 엎어 버립니다.
궁금이... 님이 쓰신 글 :
: 안녕하세요
: 제가 화면에 여러가지 그림을 그리는데요
: 선, 원, 사각형 등을 그리는데
: 매끄럽지 않네요
: 찾아보니깐
: Graphics32를 사용하면 속도 및 기능이 좋다는데요
: 찾아보니 선을 그리기 위해서
: TBitmap32* bm = new TBitmap32();
: bm->MoveTo(0,0);
: bm->LineToS(10, 100);
: 하고
:
: 나중에 TCanvas에 BitBlt로 다시 bm을 그리던데
: 맞나요 이럼 어차피 TCanvas에 그리는거라 속도가 빨라질까요?
: 그리고 TBitmap32는 별도의 원 및 사각형을 그리는 함수가 없는데 어떻게 그리나요?
: 그리고 또 한가지는 안티알리안싱인데 이걸 어떻게 설정하나요?
: 궁금합니다.
: 고수님들 도움 부탁드립니다.
|