티스토리 뷰
목차
반응형
C++ 빌더로 원 그리기, 복사하기 bitmap CopyRect
GUI 캔버스 Canvas에 원이 그려진 bmp를 불러와 위치를 지정하는 소스가 있고요. 여기서 그려진 원을 복사하는 소스입니다. 출처인 스택오버플로 소스 코드를 발췌했습니다.
【1. 원 그리기】
TBitmap 객체를 생성하고 비트맵의 캔버스에 원을 그립니다. 이 객체는 배경 백그라운드 Canvas로 불러오는 소스입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Graphics::TBitmap* bmp; void __fastcall TForm1::FormCreate(TObject* Sender) { bmp = new Graphics::TBitmap(); bmp->Width = 300; bmp->Height = 300; bmp->Canvas->Ellipse(0, 0, 300, 300); } void __fastcall TForm1::Button1Click(TObject* Sender) { HRGN rgn = CreateRectRgn(10, 10, 30, 30); if(SelectClipRgn(bmp->Handle, rgn) == ERROR) ShowMessage("Error"); Canvas->Draw(0, 0, bmp); } | cs |
【2. Ellipse 복사해 새로 그리기】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | void __fastcall TForm1::Button2Click(TObject *Sender) { //dimensions of real image: 300x300 //clipping a region //dimension: 200x200 //offset (x,y): (10,10) int xOff = 10; int yOff = 10; int widthOfRegion = 200; int heightOfRegion = 200; //printing the clipped region //dimension: 200x200 //offset (x,y): (305,0) -> to do not overwrite image drawn by button1 int xOff2 = 305; int yOff2 = 0; int widthOfRegion2 = 200; int heightOfRegion2 = 200; Canvas->CopyRect( //first rect is destination TRect(xOff2, yOff2, xOff2 + widthOfRegion2, yOff2 + heightOfRegion2) //second is canvas of source ,bmp->Canvas //third is rect of source that you want to copy ,TRect(xOff, yOff, xOff + widthOfRegion, yOff + heightOfRegion) ); } | cs |
Background Canvas의 함수 CopyRect를 호출해 일부만 복사합니다. 이때, x y 좌표에 오프셋 값을 주어 일부만 복사 or 새로 생성한 영역에 꽉 차지 않도록 복사합니다.
CopyRect 함수와 x, y 오프셋 값만 잘 보시면 됩니다.
C++ 빌더로 원 그리기, 복사하기 bitmap CopyRect
written by vicddory
반응형