티스토리 뷰

목차

    반응형

    C++ 빌더로 원 그리기, 복사하기 bitmap CopyRect


    출처 : 스택오버플로 bitmap c++ builder copy 


    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(00300300);
    }
     
    void __fastcall TForm1::Button1Click(TObject* Sender)
    {
        HRGN rgn = CreateRectRgn(10103030);
        if(SelectClipRgn(bmp->Handle, rgn) == ERROR) ShowMessage("Error");
        Canvas->Draw(00, 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 새로 생성한 영역에 꽉 차지 않도록 복사합니다.


    볼랜드 C++ Builder 비트맵 캔버스에 원 그리고 일부 복사 CopyRect


    CopyRect 함수와 x, y 오프셋 값만 잘 보시면 됩니다.


    C++ 빌더로 원 그리기, 복사하기 bitmap CopyRect

    written by vicddory

    반응형