|
이미지 두개를 사용하시는 것은 좋지 않은 방법입니다. 만약 투명으로 그린다고 하셔도 그것을 처리하는 데는 엄청나게 느립니다.
아래는 비트맵위에서 마우스로 원하는 곳으로 선을 긋는 예제입니다. 만약, 두개를 꼭 사용하셔야 한다면, 도스용 게임을 만들때와 비슷하게 가상으로 Image를 하나 만드시고 그곳에 작업을 하신다음에 옮겨 오시는 것도 하나의 방법입니다. 하지만 추천드리지는 않습니다. (바로 그리기 작업을 하는 것보다 느립니다. 비트맵이 클때는 더욱 그렇습니다)
그리고, 만약 속도에 더욱 문제가 있다면, PaintBox를 이용해 보시는 것도 좋습니다. Image보다 훨씬 빠르지만, 자동으로 RePaint가 되지 않는다는 단점이 있습니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
tagPOINT START_PIXEL;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
DoubleBuffered = true;
Image1->Transparent = true;
Image1->Picture->LoadFromFile("C:\\Work\\지도.BMP");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
START_PIXEL.x = X;
START_PIXEL.y = Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->MoveTo(START_PIXEL.x, START_PIXEL.y);
Image1->Canvas->LineTo(X, Y);
}
//---------------------------------------------------------------------------
장재욱 님이 쓰신 글 :
: 지금은 BMP 이미지를 로드 시켰습니다.
:
: 그리고, 마우스의 down, up, move 이벤트를 통해서
:
: lineto와 moveto를 이용해서 선을 그렸습니다.
:
: DoubleBuffered 를 true로 해서 했는데도,
:
: 큰 차이는 모르겠구요...
:
: 저도 일단은 VCL을 좀 보려고 하는데...
:
: 다른 방안이 있습니까?
:
: 그리고, 답변 주신 것만도 정말 감사 드립니다^^
|