컨텐츠 바로가기


board


현재 위치

  1. 게시판
  2. 자료실

자료실

관리자가 운용하는 제품관련 자료실입니다.

WQV43 / WV70-Touch 예제 - 비트맵 그림 그리기.
제목 WQV43 / WV70-Touch 예제 - 비트맵 그림 그리기.
작성자 관리자 (ip:)
  • 작성일 2011-02-20 23:30:57
  • 추천 추천 하기
  • 조회수 407
  • 평점 0점
 

이번 예제에서는 흑백 비트맵과 8bits/pixel(BGR332 포멧) 비트맵 그림을 LCD에 그리는 방법에 대해 설명하도록 하겠습니다.

 

프로그램 작성시 필요한 아이콘이나 특수문자, 외국어는 물론, 특별한 크기의 한글또한 그림 형태로 화면에 표시하는등 LCD에서는 비트맵 그림을 표현할 일이 자주 생기게 됩니다.

 

기본 소프트웨어는 예제-Demo 화면 그리기 소스 를 사용합니다.

 

1. LCD 화면에 표시할 비트맵 그림을 준비합니다.

 

                          dog_110x170.PNG    가로 110픽셀 x 세로 170픽셀 크기의 24Bits per pixel 비트맵  그림  다운로드 

 

                          dog_BW_110x170.PNG 가로 110픽셀 x 세로 170픽셀 크기의 흑백 비트맵 그림  다운로드  

 

 

2. 칼라 비트맵 그림에서 비트맵 데이터를 추출합니다.

 

    칼라 그림의 경우에는 비트맵 데이터양이 많기 때문에 1픽셀당 1 bytes  의 메모리를 할당합니다.

 

    16bits/pixel이나 24bits/pixel 그림 데이터를 사용하면 좀 더 예쁜 색감을 표현할수 있겠지만 조금만 그림 크기가 커져도 data 양이 너무 커져서 MCU 메모리에 저장이 힘들어지기 때문에 BGR332 포멧, 즉 상위 3bits는 Blue, 가운데 3bits는 Green, 하위 2bits는 RED 에 할당하는 방법을 가장 많이 사용하게 됩니다.

  

    BGR332 포멧 상세 설명  

    비트맵 변환기 ezBMP 바로가기 

  

    BGR332 포멧으로 변환된 data :  dog_8bits_110x170.c    < 110 픽셀 x 170 픽셀 = 18,700 bytes. >

 

 

3. 흑백 비트맵 그림에서 비트맵 데이터를 추출합니다.

 

    흑백 그림의 경우에는 1픽셀당 1bit로 표현이 가능하기 때문에 1byte로 8개 픽셀을 표현할수 있어 칼라 비트맵 데이터보다는 아무래도 메모리 사용에 대한 부담이 줄어들게 됩니다.

 

    데이터 변환은 여러 방법이 있겠지만 freeware 인  LCDAssistant.exe  를 사용하는 것을 기준으로 설명 드립니다.

   (2013년 3월 18일 추가) -->   비트맵 변환기 ezBMP 바로가기 를 사용하시면 보다 편리하게 비트맵 변환을 할 수 있습니다.

 

     LCD Assitant를 실행해서 흑백 비트맵 파일을 읽어들이면 아래와 같은 화면이 표시됩니다.

                                                           LCDAssit_capture_1.PNG

 

      Byte Orientation을 "Horizontal"로 바꾸고, Width를 110(픽셀) 보다 큰 8의 배수 112로 바꾸어 준 후 "File-Save Output"을 선택하여 비트맵 data를 만들어 냅니다.

                                                           LCDAssit_capture_2.PNG

 

        8 픽셀 / byte 포멧으로 변환된 data :   dog_bw_110x170.c    < 110 픽셀(14 bytes)  x 170 픽셀 = 2,380 bytes. >

 

 

4.  ez_font.c 파일에 적절한 변수 이름으로 비트맵 data를 추가 합니다.

 

예제에서는 BGR332 칼라 데이터의 경우 아래와 같이 dog_8bits_110x170[18700] 으로 변수 이름을 설정하고,

          prog_uchar dog_8bits_110x170[18700] = {   //110 bytes per line x 170 lines = 18,700 bytes
          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,..........................

          };

 

흑백 data의 경우 dog_bw_110x170[2380)  으로 변수 이름을 설정하였습니다.

          prog_uchar dog_BW_110x170[2380] = {   //14 bytes per line x 170 lines = 2,380 bytes
          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
          0x00, 0x00, 0x00, 0x07, 0xFF, ..........................

          };

 

***물론 ez_font.h 파일에도 아래와 같이 해당 변수를 선언해 줍니다.

           ////ez_fonts.c////////////////////////////////////
          extern prog_uchar dog_8bits_110x170[18700];  //110 bytes per line x 170 lines = 18,700 bytes
          extern prog_uchar dog_BW_110x170[2380];   //14 bytes per line x 170 lines = 2,380 bytes

          ///////////////////////////////////////////////////
          extern prog_uchar ez_nums_24x30[11][90]; //'0~9, blank' 24x30 font total 990 bytes, 90 bytes each
          extern prog_uchar ez_ascii_5x7[95][7];  // 5x7 ascii font, each character takes 7 bytes, total 665 bytes, draw from top-left to top-right direction.

          .....

          ...

 

 

5. menu_processing.c 파일의 void draw_menu0(void) 함수를 아래와 같이 수정하여 Button등을 그리는 부분을 없애고 BGR332, 흑백 비트맵 data를 화면에 표시할 수 있도록 합니다.

 

   흑백 비트맵은 draw_BWbmp(orientation, data 시작번지, x, y, width, height, 표시칼라, 배경칼라) 함수로 그림을 그릴수 있으며,

   BGR332 칼라 비트맵은 draw_BGR332(orientation, data 시작번지, x, y, width, height) 함수를 이용하여 LCD 상에 표시를 할 수 있습니다.

 

          void draw_menu0(void)
          {
           clear_box(1, 0, 0, 480, 272, color_DCYAN); // (1=landscape, x=0, y=0, width=480, height=272, color) --- faster than draw_box()
           draw_BWbmp(1, &dog_BW_110x170[0], 100, 50, 110, 170, color_WHITE, color_DCYAN); 

           draw_BGR332(1, &dog_8bits_110x170[0], 300, 50, 110, 170);       // (orientation, bmp_data_start_address, x, y, width, height)

          /* 
           //이전화면 지우기
           clear_box(1, 0, 0, 480, 272, color_DCYAN); // (1=landscape, x=0, y=0, width=480, height=272, color) --- faster than draw_box()

          .....

          ...

          */

          } 

 

 WQV43-Touch 비트맵 그림 그리기 예제소스  :       WQV43-Draw_BMP(20120320A).zip

 WV70-Touch    비트맵 그림 그리기 예제소스  :       WV70-Draw_BMP(20120320A).zip

< SW Revisions >

2012년 3월 20일 : 한글과 모양 라이브러리를 Project file 에 포함시켜 별도의 등록과정 없이도 곧바로 사용할수 있게 변경.

                               uart buffer count 관리를 개선하여 uart traffic 이 많을때 동작이 원활하게 함.

                               open_window() orientation 4, 5 관련 버그수정.

첨부파일
비밀번호 삭제하려면 비밀번호를 입력하세요.

목록

삭제 수정 답변

댓글 수정

비밀번호

수정 취소

/ byte

댓글 입력

이름 비밀번호 관리자답변보기

확인

/ byte


* 왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

회원에게만 댓글 작성 권한이 있습니다.