운영체제 : ingenient 제공 micro kernel.
기존 8but OSD를 16bit OSD로 변경하고,
기본적인 Graphic API를 구성하고, (dot, line, box, drawing)
확장 API를 추가한다. (alpha blending, sliding, etc..)
다음과 같이 16bit 모드로 레지스터를 설정해준다.
OSD_win_set_rgb16_ex(&wc0,1);
OSD_win_set_blend_ratio(&wc0,OSD_WIN_BLEND_0);
//Transparency Enable for ODS window
OSD_win_set_transparency(&wc0,OSD_WIN_TRANSPARENCY_ENABLE);
//set window rotation
memset(wc0.buf,0,wc0.disp_width*wc0.disp_height*2);
//OSD_win_set_rgb16(&wc0,1);
OSD_win_enable(&wc0);
일반적으로 포토샵 등에서 저장한 16bit BMP는
GGGB BBBB // low byte
XRRR RRGG // high byte
와 같이 배열되어 있다. RGB 가 각각 5,5,5
DM320에서는 RGB가 5,6,5 형태로 되어 있으므로,
GGGB BBBB // low byte
RRRR RGGG // high byte
와 같이 배열되어 있음을 알 수 있다.
여기서 Green color를 처리해주기 위해 low byte의 6번째 비트를 1로 셋팅해주며,
1~5번째 비트는 소스의 1~5번째 비트를 사용하도록 구성해본다.
타겟 low = (((low<<1)&0xC0)|0x20)|(low&0x1F);
//(UINT8)((low&0x1F)|((low&0x07)<<5));
// GGGB BBBB
타겟 high = (high<<1)|((low&0x8F)>>7);
//(UINT8)(((Green&0x38)>>3)|((Red&0x1F)<<3));
// RRRR RGGG
위와 같은 처리를 하게되면, 최대한 비슷한 color의 화면 display 처리가 가능하다.
문제는 0x00 0x00 을 가지는 transparency 칼라 처리가 되지 않는다는 것이다..
0xc0, 0x00 와 같이 항상 처리가 되어버린다.
그래서 MASK 용 color를 따로 지정해 주는 방법을 써보자..
color 중에 자주 쓰이지 않는 자주색을 MASK color로 써본다.