그래픽 라이브러리 - gxLib
gxLib의 기본 사용법에 대한 설명입니다. gxLib는 Device Context 개념을 적용했기 때문에 그래프출력 대상이 다르더라도 같은 함수 이름을 사용합니다. 즉, 하드웨어의 화면이나 비트맵, JPEG, PNG에 선을 그린다고 한다면, 출력 대상이 다르더라도 모두 gx_line()을 사용합니다. 그러므로 출력 대상별로 Device Contect 핸들을 구하는 함수는 따로 있습니다.
- 화면 : dc_t, gx_get_screen_dc()를 이용하여 구합니다.
- bmp : bmp_t, gx_bmp_open()를 이용하여 구합니다.
- jpg : jpg_t, gx_jpg_open()를 이용하여 구합니다.
- png : png_t, gx_png_open()를 이용하여 구합니다.
이 함수를 이용하여 핸들을 구했다면 아래와 같은 함수를 이용하여 그래프를 출력할 수 있습니다. gxLib 함수에 대한 자세한 설명은 gxLib 함수 설명 게시판을 참고하여 주십시오.
gxLib의 최근 버전은 그래픽 & 멀티미디어 게시판에서 구하실 수 있습니다.
첫 번째 할 일은 gx_init() 호출
gxLib를 사용하려면 gx_init() 함수를 이용하여 라이브러리를 초기화합니다. 라이브러리 사용을 종료하려면 gx_close()를 호출하여 작업을 완료합니다. gx_init() 함수를 호출할 때에는 프레임 버퍼의 장치명을 인수로 넘겨 줍니다.
gx_init( "/dev/fb"); .... 그래프 출력 작업 ... gx_close();
gx_init()는 프로그램 시작에서, gx_close()는 프로그램 종료에 호출하게 됩니다.
두 번째 할 일은 화면 Device Context 핸들 구하기
화면에 선이나 원, BMP나 PNG같은 파일을 출력하기 위해서는 화면에 대한 device Context 핸들을 구합니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); .... 이후 화면 출력은 dc_screen을 이용 ... gx_close();
화면을 깨끗하게 지우는 gx_clear();
gx_clear()은 Device Context에 해당하는 객체 전체를 지정된 색상으로 모두 칠해 줍니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); gx_clear( dc_screen, gx_color( 0, 0, 0, 255)); gx_close();
특정 색을 구하는 gx_color();
gx_color()은 red, green, blue, alpha 값을 이용하여 칼라 값을 구합니다. 이렇게 칼라 값을 구하는 함수를 따로 둔 이유는, 1비트에서 32비트까지 다양한 그래픽을 지원하기 위해서 입니다. 같은 색상이라도 칼라 깊이에 따라서 다른 값으로 표현되기 때문입니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); gx_clear( dc_screen, gx_color( 0, 0, 0, 255)); gx_close();
선을 긋는 gx_line();
gx_line()은 두개의 좌표를 이용하여 선을 긋습니다. 선의 색은 Device Conext가 가지고 있는 pen_color로 지정할 수 있습니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); dc_screen->pen_color = gx_color( 255, 0, 0, 0); // 빨간색
dc_screen->brush_color = gx_color( 0, 0, 0, 0);
gx_line( dc_screen, 0, 0, 100, 100); gx_close();
점의 좌표를 변경하는 gx_move_to();
gx_line()을 이용하여 선을 그으면, gxLib는 항상 마지막 좌표를 기억하게 됩니다. 이후에 gx_line_to() 함수를 이용하면, 마지막 좌표와 새로 지정된 자표까지 선을 긋게 되는데, gx_line_to()를 호출하기 전에 gxLib가 기억하고 있는 점의 좌표를 변경하려면 gx_move_to() 함수를 이용합니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); gx_move_to( dc_screen, 200, 200); gx_close();
점의 좌표를 변경하는 gx_line_to();
gx_line_to()는 gx_line(), gx_move_to()로 지정한 마지막 좌표에서 인수로 넘긴 좌표까지 선을 그어 줍니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); dc_screen->pen_color = gx_color( 255, 0, 0, 0); // 빨간색
gx_move_to( dc_screen, 200, 200); gx_line_to( dc_screen, 400, 200); gx_close();
사각형을 그려 주는 gx_rectangle(), 원을 그려 주는 gx_circle(), 타원을 그려주는 gx_ellipse()
기본 도형을 그려주는 함수입니다. 이 함수는 Device Context가 가지고 있는 pen_color와 brush_color의 색상에 맞추어 출력합니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); dc_screen->pen_color = gx_color( rand() %128 +128, rand() %128 +128, rand() %128 +128, 255);
dc_screen->brush_color = gx_color( 0, 0, 0, 0);
gx_rectangle( dc_screen, 0, 0, 100, 100); gx_circle( dc_screen, coor_x, coor_y, radius); gx_ellipse( dc_screen, coor_x, coor_y, width, height); gx_close();
점의 좌표를 변경하는 gx_line_to();
gx_line_to()는 gx_line(), gx_move_to()로 지정한 마지막 좌표에서 인수로 넘긴 좌표까지 선을 그어 줍니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); gx_move_to( dc_screen, 200, 200); gx_line_to( dc_screen, 400, 200); gx_close();
Bitmap 파일을 처리해 주는 bmp_t
bmp_t는 또 다른 Device Context 스트럭쳐입니다. dc_t 가 화면에 대한 Device Context라면 bmp_t는 bitmap을 위한 Device Context입니다. 그러므로 bitmap를 화면에 출력하기 위해서는 gx_bmp_open() 함수를 이용하여 파일을 열고, 사용이 끝나면 gx_bmp_close()를 이용하여 bmp를 사용하기 위한 메모리를 반환합니다.
bmp_t *bmp; bmp = gx_bmp_open( bmp_name); .... bmp를 이용합니다. .... gx_bmp_close( bmp);
Jpeg 파일을 처리해 주는 jpg_t
bmp_t에 대해서 Jpeg를 처리하는 Device Context 는 jpg_t입니다. Jpeg 파일을 처리하기 이해서는 gx_jpg_open() 함수를 이용하여 파일을 열고, 사용이 끝나면 gx_jpg_close()를 이용하여 jpg를 사용하기 위한 메모리를 반환합니다.
jpg_t *jpg; jpg = gx_jpg_open( jpg_name); .... jpg를 이용합니다. .... gx_jpg_close( jpg);
PNG 파일을 처리해 주는 png_t
bmp_t에 대해서 PNG를 처리하는 Device Context 는 png_t입니다. PNG 파일을 처리하기 이해서는 gx_png_open() 함수를 이용하여 파일을 열고, 사용이 끝나면 gx_png_close()를 이용하여 png를 사용하기 위한 메모리를 반환합니다.
png_t *png; png = gx_png_open( png_name); .... png를 이용합니다. .... gx_png_close( png);
그래픽 영역을 복사해 주는 gx_bitblt()
bmp_t를 dc_t로 dc_t 에서 bmp_t 로 또는 jpg_t나 png_t의 영역을 복사할 때에는 gx_bitblt()를 사용합니다.
dc_t *dc_screen; bmp_t *bmp; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); bmp = gx_bmp_open( bmp_name); gx_bitblt( dc_screen, 20, 0, ( dc_t *)bmp, 0, 0, bmp->width, bmp->height); gx_bmp_close( bmp); gx_close();
문자열을 출력하려면
문자열을 출력하려면 gx_set_font()로 글꼴을 선택하고, gx_text_out()을 이용하여 문자열을 출력할 수 있습니다.
dc_t *dc_screen; gx_init( "/dev/fb"); dc_screen = gx_get_screen_dc(); gx_set_font( "nbold32.bdf");
dc_screen->pen_color = gx_color( 0, 0, 0, 255);
gx_text_out( dc_screen, 50 , 270, "FALINUX 포럼!!" );
gx_close();
이외에 다양한 함수가 준비되어 있습니다. 다른 함수의 사용법은 그래픽 라이브러리 - gxLib 함수 설명을 참고하세요.
오오 잘동작하네요!! 굉장히 잘쓰겠습니다.. 정말 정말 감사합니다^^