procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// 마우스 드래그를 처음 시작할때
if ((Button = mbLeft) and not(IsFocusRect))then
begin
DragOrigin := Point(x,y); // 마우스 드래그 시작위치(x,y) 저장
MovePoint := DragOrigin;
IsFocusRect := True; // 마우스 드래그를 시작함
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if IsFocusRect then
begin
// 바로전의 선택 직사각형을 지운다
Image1.Canvas.DrawFocusRect(rect(DragOrigin.x, DragOrigin.y, MovePoint.X, MovePoint.Y));
// 마우스 드래그 시작위치부터 현재 위치까지 선택 직사각형을 그린다
Image1.Canvas.DrawFocusRect(rect(DragOrigin.x, DragOrigin.y, X, Y));
// 최근 선택 직사각형을 저장한다
FinalRect := rect(DragOrigin.x, DragOrigin.y, X, Y);
// 최근 드래그 위치를 저장
MovePoint := point(x,y);
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
bmp: TBitmap;
begin
if (IsFocusRect and (Button = mbLeft)) then
begin
// 선택한 영역의 이미지를 Image2로 복사
bmp := TBitmap.Create; // 임시저장용 Bitmap
try
bmp.width := ord(FinalRect.Right - FinalRect.Left);
bmp.height := ord(FinalRect.Bottom - FinalRect.Top);
bmp.Canvas.CopyRect(rect(0, 0, bmp.width,bmp.height), image1.Canvas,FinalRect);
Image2.Canvas.StretchDraw(Image2.ClientRect, bmp);
finally
bmp.free;
end;
즉 예를 들어 800x600을 Image1에 불러들인다음... Image1의 가로, 세로 길이를 100으로 설정한다음, (이 경우 Left1, Top1 지점부터 가로100, 세로 100 픽셀만 보이겠죠?) 그런데 이것을 코딩으로 그림의 Left50, Top50 지점부터 가로100...
거리
•
2003.04.03 20:27
도움말에서 StretchBlt를 찾아보세요.
그걸로 하면 충분하겠네요.
김영대
•
2003.04.03 12:08
// 안녕하세요 김영대(http://www.howto.pe.kr)입니다
// Image1에 원본 그림을 불러다 놓고...
그걸로 하면 충분하겠네요.