설명

gx_bitblt() 함수는 DC에서 DC로 지정된 영역을 그대로 복사해 주지만, gx_bitlblt_mask() 함수는 마스크에 해당하는 이미지에 따라 복사합니다. 즉, gx_bitblt() 함수는 인수로 지정한 영역을 그대로 복사 합니다.

그러나 gx_bitblt_mask()는 목적 DC와 소스 DC뿐만 아니나 마스크 DC도 필요하며, 지정된 영역 중에 역시 지정된 칼라 값에 해당하는 부분만 복사 됩니다.

마스크와 마스크 내의 칼라 값을 아울러 비교하기 때문에, 지정된 영역 안에서 특정 부분만 복사할 수 있습니다.

 

헤더 gx.h
형태 dc_t *gx_get_compatible_dc( dc_t *dc)
인수
dc_t *dc 복사 대상 DC
반환
dc_t * 복사된 DC

예제

int main( void)
{
    dc_t       *dc_screen;      // 화면 Device Context
    dc_t       *dc_fore;        // 평소 출력할 이미지
    dc_t       *dc_back;        // 색상이 선택되었을 때 출력할 이미지
    dc_t       *dc_mask;        // mask 이미지
    
    color_t     color;

    gx_init( "/dev/fb");
    dc_screen = gx_get_screen_dc();

    dc_fore = gx_get_compatible_dc( dc_screen);
    dc_back = gx_get_compatible_dc( dc_screen);
    dc_mask = gx_get_compatible_dc( dc_screen);

    gx_open_file( dc_fore, "gx_bitblt_mask_fore.bmp");
    gx_open_file( dc_back, "gx_bitblt_mask_back.bmp");
    gx_open_file( dc_mask, "gx_bitblt_mask_mask.bmp");
    
    gx_bitblt( dc_screen, 0, 0, dc_fore, 0, 0, dc_screen->width, dc_screen->height);
    getchar();

    gx_get_pixel( dc_mask, 200, 300, &color);

    gx_bitblt_mask( dc_screen, dc_back, dc_mask, color, 24, 45, 530, 414);
    getchar();
    gx_bitblt_mask( dc_screen, dc_fore, dc_mask, color, 24, 45, 530, 414);
    getchar();

    gx_get_pixel( dc_mask, 365, 165, &color);

    gx_bitblt_mask( dc_screen, dc_back, dc_mask, color, 333, 133, 82, 89);
    getchar();
    gx_bitblt_mask( dc_screen, dc_fore, dc_mask, color, 333, 133, 82, 89);
    
    gx_release_dc( dc_back);
    gx_release_dc( dc_mask);
    gx_release_dc( dc_fore);
    
    gx_release_dc( dc_screen);
    gx_close();    
}

실행 결과