1 / 28

13. IGraphics API

13. IGraphics API. BREW 는 삼각형 , 직사각형 , 원 , 파이 조각 쐐기까지도 포함하는 다수의 프리미티프 를 가진다 . 그래픽스는 비트맵 보다 더 간단하고 더 적은 일을 제공한다 . 두 가지 주요 장점 - 확장 가능하다 . - 적은 공간을 차지한다 . IGraphic 인터페이스를 사용하기 위하여 다음과 같은 절차가 필요하다. IGraphics 인터페이스 생성. Draw 작업에 필요한 세팅. Draw( 점 , 선 , 다각형 등 ) 작업. Update.

shay
Download Presentation

13. IGraphics API

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 13. IGraphics API • BREW는 삼각형, 직사각형, 원, 파이 조각 쐐기까지도 포함하는 다수의 프리미티프 • 를 가진다. • 그래픽스는 비트맵 보다 더 간단하고 더 적은 일을 제공한다. • 두 가지 주요 장점 • - 확장 가능하다. • - 적은 공간을 차지한다. • IGraphic 인터페이스를 사용하기 위하여 다음과 같은 절차가 필요하다. IGraphics 인터페이스 생성 Draw 작업에 필요한 세팅 Draw(점, 선, 다각형 등) 작업 Update IGraphics 인터페이스 객체 임베디드 모바일 프로그래밍

  2. 13. IGraphics API • 13.1 IGraphics 함수 • IGRAPHIC_SetColor 함수 • 현재 RGBA 값을 설정합니다. 다른 RGBA 값에 대해 이 함수를 다시 호출할 때까지 모든 그래픽 개체는 이 색으로 그려집니다. 여기서 RGBA 컬러모델은 별도로 투명도를 나타내는 256 단계의 알파채널을 추가한 것이다. 임베디드 모바일 프로그래밍

  3. 13. IGraphics API • IGRAPHIC_DrawArc 함수 • 전경색과 같은 원호를 그린다. 임베디드 모바일 프로그래밍

  4. 13. IGraphics API • IGRAPHICS_DrawCircle 함수 • 현재 전경색과 같은 윤곽선의 원을 그린다. 채우기 모드를 켜면 원의 내부가 현재 채우기 색으로 채워진다. 임베디드 모바일 프로그래밍

  5. 13. IGraphics API • IGRAPHICS_DrawEllipse 함수 • 전경색과 같은 윤곽선으로 타원을 그린다. 채우기 모드를 켜면 타원의 내부가 현재 채우기 색으로 채워진다 임베디드 모바일 프로그래밍

  6. 13. IGraphics API • IGRAPHICS_DrawLine 함수 • 주어진 시작점과 끝점으로 전경색의 선을 그린다. 임베디드 모바일 프로그래밍

  7. 13. IGraphics API • IGRAPHICS_DrawPie 함수 • 전경색과 같은 윤곽선의 원 조각을 그린다. 채우기 모드를 켜면 원 조각의 내부가 현재 채우기 색으로 채워진다. 임베디드 모바일 프로그래밍

  8. 13. IGraphics API • IGAPHICS_SetPointSize 함수 • 점 크기(너비)를 픽셀 단위로 설정한다. 임베디드 모바일 프로그래밍

  9. 13. IGraphics API • IGRAPHICS_DrawPoint 함수 • 현재 점 크기와 전경색으로 점을 그립니다 임베디드 모바일 프로그래밍

  10. 13. IGraphics API • IGRAPHICS_DrawPolyline 함수 • 현재 전경색의 윤곽선으로 다각형을 그린다. 채우기 모드를 켜면 다각형의 내부가 현재 채우기 색으로 채워진다. 임베디드 모바일 프로그래밍

  11. 13. IGraphics API • IGRAPHICS_DrawRect 함수 • 축을 따라 현재 전경색의 윤곽선으로 직사각형을 그린다. 채우기 모드를 켜면 내부가 현재 채우기 색으로 채워진다. 임베디드 모바일 프로그래밍

  12. 13. IGraphics API • IGRAPHIC_DrawTriangle 함수 • 현재 전경색의 윤곽선으로 삼각형을 그립니다. 채우기 모드를 켜면 내부가 현재 채우기 색으로 채워진다. 임베디드 모바일 프로그래밍

  13. 13. IGraphics API • ISHELL_SetTimer 함수 • 타이머가 만료되면 지정한 콜백 함수가 호출되어 함수의 첫 번째 인수로 지정한 사용자 데이터 포인터를 전달한다. • 타이머는 현재 시간에 지정한 밀리초(Milliseconds)를 더한 시간에 만료된다. 임베디드 모바일 프로그래밍

  14. 13. IGraphics API 13.2 IGraphic API – 예제 프로그램(geometry.c) #include "geometry.h" #include "geometry.bid" static void DisplayOutput(IApplet * pMe, int nline, char *pszStr, RGBVAL clrColor); int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj){ *ppObj = NULL; if(ClsId == AEECLSID_GEOMETRY){ if(AEEApplet_New(sizeof(myapp_t), ClsId, pIShell, po, (IApplet**)ppObj, (AEEHANDLER)Geometry_HandleEvent, (PFNFREEAPPDATA)Geometry_Cleanup) == TRUE) { return(AEE_SUCCESS); } } return(EFAILED);}static boolean Geometry_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam){ myapp_t * pApp = (myapp_t *)pi; AEEApplet * pMe = &pApp->a; switch (eCode) { case EVT_APP_START: ISHELL_GetDeviceInfo (pMe->m_pIShell, &pApp->di); ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_GRAPHICS,(void **)&pApp->pIGraphics); IDISPLAY_ClearScreen (pMe->m_pIDisplay); // Clear whole screen IDisplayOutput((IApplet *)pMe, 5, "드로잉 데모", MAKE_RGB(0,0,0)); IDISPLAY_Update (pMe->m_pIDisplay); //set timer to start drawing shapes ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackArc, pApp); return(TRUE); break; } return(FALSE);} 임베디드 모바일 프로그래밍

  15. 13. IGraphics API void Geometry_Cleanup(myapp_t * pApp) { IGRAPHICS_Release(pApp->pIGraphics); } //draw arc void Geometry_CallbackArc(myapp_t * pApp) { AEEArc arc; AECHAR szBuf[] = {'A','r','c','\0'}; arc.cx = pApp->di.cxScreen / 2; arc.cy = pApp->di.cyScreen / 2; arc.r = 30; arc.startAngle = 0; arc.arcAngle = 180; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF); IGRAPHICS_DrawArc(pApp->pIGraphics, &arc); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackCircle, pApp); } 임베디드 모바일 프로그래밍

  16. 13. IGraphics API //draw circle void Geometry_CallbackCircle(myapp_t * pApp) { AEECircle circle; AECHAR szBuf[] = {'C','i','r','c','l','e', '\0'}; circle.cx = pApp->di.cxScreen / 2; circle.cy = pApp->di.cyScreen / 2; circle.r = 30; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0xFF, 0xFF); IGRAPHICS_DrawCircle(pApp->pIGraphics, &circle); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackEllipse, pApp); } //draw ellipse void Geometry_CallbackEllipse(myapp_t * pApp) { AEEEllipse ellipse; AECHAR szBuf[] = {'E','l','l','i','p','s','e','\0'}; ellipse.cx = pApp->di.cxScreen / 2; 임베디드 모바일 프로그래밍

  17. 13. IGraphics API ellipse.cy = pApp->di.cyScreen / 2; ellipse.wx = 30; ellipse.wy = 15; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF); IGRAPHICS_DrawEllipse(pApp->pIGraphics, &ellipse); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackLine, pApp); } //draw line void Geometry_CallbackLine(myapp_t * pApp) { AEELine line; AECHAR szBuf[] = {'L','i','n','e','\0'}; line.sx = 20; line.sy = 20; line.ex = 60; line.ey = 60; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF); IGRAPHICS_DrawLine(pApp->pIGraphics, &line); 임베디드 모바일 프로그래밍

  18. 13. IGraphics API IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPie, pApp); } //draw pie graph void Geometry_CallbackPie(myapp_t * pApp) { AEEPie pie; AECHAR szBuf[] = {'P','i','e','\0'}; pie.cx = pApp->di.cxScreen / 2; pie.cy = pApp->di.cyScreen / 2; pie.r = 30; pie.startAngle = 0; pie.arcAngle = 45; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0xCC, 0x00, 0xFF, 0xFF); IGRAPHICS_DrawPie(pApp->pIGraphics, &pie); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPoint, pApp); } 임베디드 모바일 프로그래밍

  19. 13. IGraphics API //draw point void Geometry_CallbackPoint(myapp_t * pApp) { AEEPoint point; AECHAR szBuf[] = {'P','o','i','n','t','\0'}; point.x = pApp->di.cxScreen / 2; point.y = pApp->di.cyScreen / 2; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0x66, 0x00, 0x99, 0xFF); IGRAPHICS_SetPointSize(pApp->pIGraphics, 10); IGRAPHICS_DrawPoint(pApp->pIGraphics, &point); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPolygon, pApp); } //draw polygon void Geometry_CallbackPolygon(myapp_t * pApp) { AEEPolygon polygon; AECHAR szBuf[] = {'P','o','l','y','g','o','n','\0'}; 임베디드 모바일 프로그래밍

  20. 13. IGraphics API polygon.len = 4; polygon.points = MALLOC(sizeof(AEEPoint) * polygon.len); //allocate point array for polygon //make polygon points polygon.points[0].x = 10; polygon.points[0].y = 10; polygon.points[1].x = 50; polygon.points[1].y = 50; polygon.points[2].x = 30; polygon.points[2].y = 70; polygon.points[3].x = 10; polygon.points[3].y = 30; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0x00, 0xFF); IGRAPHICS_DrawPolygon(pApp->pIGraphics, &polygon); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); FREE(polygon.points); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackPolyline, pApp); } 임베디드 모바일 프로그래밍

  21. 13. IGraphics API //draw polyline (multiple connected lines) void Geometry_CallbackPolyline(myapp_t * pApp) { AEEPolyline polyline; AECHAR szBuf[] = {'P','o','l','y','l','i','n','e','\0'}; polyline.len = 4; polyline.points = MALLOC(sizeof(AEEPoint) * polyline.len); //allocate point array for polyline //make polyline points polyline.points[0].x = 80; polyline.points[0].y = 20; polyline.points[1].x = 30; polyline.points[1].y = 90; polyline.points[2].x = 50; polyline.points[2].y = 70; polyline.points[3].x = 20; polyline.points[3].y = 60; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0x99, 0x00, 0x00, 0xFF); IGRAPHICS_DrawPolyline(pApp->pIGraphics, &polyline); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); FREE(polyline.points); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackRect, pApp); } 임베디드 모바일 프로그래밍

  22. 13. IGraphics API //draw rectangle void Geometry_CallbackRect(myapp_t * pApp) { AEERect rect; AECHAR szBuf[] = {'R','e','c','t','a','n','g','l','e','\0'}; rect.x = 20; rect.y = 20; rect.dx = 80; rect.dy = 50; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0x00, 0x00, 0xFF, 0xFF); IGRAPHICS_DrawRect(pApp->pIGraphics, &rect); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackTriangle, pApp); } //draw triangle void Geometry_CallbackTriangle(myapp_t * pApp) { AEETriangle triangle; AECHAR szBuf[] = {'T','r','i','a','n','g','l','e','\0'}; triangle.x0 = 50; triangle.y0 = 10; 임베디드 모바일 프로그래밍

  23. 13. IGraphics API triangle.x1 = 80; triangle.y1 = 50; triangle.x2 = 30; triangle.y2 = 50; IDISPLAY_ClearScreen (pApp->a.m_pIDisplay); IGRAPHICS_SetColor(pApp->pIGraphics, 0xFF, 0x00, 0xFF, 0xFF); IGRAPHICS_DrawTriangle(pApp->pIGraphics, &triangle); IDISPLAY_DrawText(pApp->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, pApp->di.cyScreen - 15, 0, IDF_ALIGN_CENTER); IDISPLAY_Update (pApp->a.m_pIDisplay); ISHELL_SetTimer(pApp->a.m_pIShell, TIMER_PERIOD, (PFNNOTIFY)Geometry_CallbackArc, pApp); } static void DisplayOutput(IApplet * pi, int nline, char *pszStr, RGBVAL clrColor) { AEEDeviceInfo di; // Device Info AECHAR szBuf[200] = {0}; // a buffer that supports 200 char string AECHAR * psz = NULL; int pixelWidth; AEEFont font = AEE_FONT_NORMAL; int pnFits = 0, dy; int totalCh = 0; int charHeight = 0; // Stores the char height in pixels for given font int pnAscent = 0; // Stores the ascent in number of pixels int pnDescent = 0; // Stores the descent in number of pixels AEERect rc; 임베디드 모바일 프로그래밍

  24. 13. IGraphics API AEEApplet * pMe = (AEEApplet*)pi; if (pMe == NULL) return; // Get device information ISHELL_GetDeviceInfo(pMe->m_pIShell,&di); // Get the font metrics info charHeight = IDISPLAY_GetFontMetrics (pMe->m_pIDisplay, AEE_FONT_NORMAL, &pnAscent, &pnDescent); STREXPAND((byte *)pszStr, STRLEN(pszStr), szBuf, sizeof(szBuf)); if (nline < 0) { dy = di.cyScreen*2/5; } else{ dy = nline * charHeight; } psz = szBuf; totalCh = STRLEN ((char *)pszStr); while ((totalCh > 0) && (*psz != NULL)) { pixelWidth = IDISPLAY_MeasureTextEx(pMe->m_pIDisplay, font, (AECHAR *) psz, // Start of the buffer to display, -1, di.cxScreen - 5, // maxWidth &pnFits); // Number of chars that will fit a line 임베디드 모바일 프로그래밍

  25. 13. IGraphics API if (pnFits == 0) return; SETAEERECT(&rc, 0, dy, di.cxScreen, charHeight); IDISPLAY_EraseRect(pMe->m_pIDisplay, &rc); IDISPLAY_SetColor(pMe->m_pIDisplay,CLR_USER_TEXT,clrColor); IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_BOLD, psz, pnFits, 5 /*start dx*/, dy, 0 /* use default rectangle coordinates */, IDF_ALIGN_CENTER); psz += pnFits; // move pointer to the next segment to be displayed totalCh -= pnFits; // reduce the total number of characters to still display dy += charHeight; // Place next line charHeight pixels below the // previous line. IDISPLAY_Update(pMe->m_pIDisplay); if (totalCh < pnFits) pnFits = totalCh; // if total number is less than pnFits, adjust pnFits } return; } 임베디드 모바일 프로그래밍

  26. 13. IGraphics API // geometry.h #ifndef __GEOMETRY_H__ #define __GEOMETRY_H__ #include "AEE.h" #include "AEEDisp.h" #include "AEEModGen.h" #include "AEEAppGen.h" #include "AEEDisp.h" #include "AEEClassIDs.h" #include "AEEStdLib.h" #include "AEEImage.h" #include "AEEShell.h" #include "AEEGraphics.h" #include "AEEMenu.h" // Menu Services #include "AEEFile.h" // AEEFile Services #include "AEEText.h" #define TIMER_PERIOD 2000 typedef struct myapp_s { AEEApplet a; //applet header AEEDeviceInfo di; IGraphics * pIGraphics; } myapp_t; 임베디드 모바일 프로그래밍

  27. 13. IGraphics API static boolean Geometry_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam); void Geometry_Cleanup(myapp_t* pApp); //drawing callbacks void Geometry_CallbackArc(myapp_t * pApp); void Geometry_CallbackCircle(myapp_t * pApp); void Geometry_CallbackEllipse(myapp_t * pApp); void Geometry_CallbackLine(myapp_t * pApp); void Geometry_CallbackPie(myapp_t * pApp); void Geometry_CallbackPoint(myapp_t * pApp); void Geometry_CallbackPolygon(myapp_t * pApp); void Geometry_CallbackPolyline(myapp_t * pApp); void Geometry_CallbackRect(myapp_t * pApp); void Geometry_CallbackTriangle(myapp_t * pApp); #endif 임베디드 모바일 프로그래밍

  28. 13. IGraphics API 13.3 실행결과 임베디드 모바일 프로그래밍

More Related