/******************************************************************* * * _ShowJPG * * Shows the contents of a JPEG file */ static void _ShowJPG(const char * sFilename) { int XSize, YSize, XPos, YPos; GUI_JPEG_INFO Info; DWORD NumBytesRead; HANDLE hFile = CreateFile(sFilename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); DWORD FileSize = GetFileSize(hFile, NULL); char * pFile = malloc(FileSize); ReadFile(hFile, pFile, FileSize, &NumBytesRead, NULL); CloseHandle(hFile); GUI_ClearRect(0, 60, 319, 239); GUI_JPEG_GetInfo(pFile, FileSize, &Info); XSize = Info.XSize; YSize = Info.YSize; XPos = (XSize > 320) ? 0 : 160 - (XSize / 2); YPos = (YSize > 180) ? 60 : 150 - (YSize / 2); if (!GUI_JPEG_Draw(pFile, FileSize, XPos, YPos)) { GUI_Delay(2000); } free(pFile); }
/********************************************************************* * * _DrawJPEGs * * Function description * Draws the given JPEG image. */ static void _DrawJPEGs(const char * sFileName) { static int i; const char acError[] = "There is possibly not enough memory to display this JPEG image.\n\nPlease assign more memory to emWin in GUIConf.c."; GUI_JPEG_INFO Info; GUI_RECT Rect; HANDLE hFile; DWORD NumBytesRead; DWORD FileSize; char * pFile; int xSize, ySize; int xPos, yPos; int r; xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); // // Display file name. // Rect.x0 = BORDER_SIZE; Rect.y0 = TITLE_HEIGHT; Rect.x1 = xSize - BORDER_SIZE - 1; Rect.y1 = YPOS_IMAGE - 1; GUI_ClearRectEx(&Rect); GUI_SetTextMode(GUI_TM_NORMAL); GUI_SetFont(&GUI_Font8x16); GUI_DispStringInRectWrap(sFileName, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER, GUI_WRAPMODE_CHAR); // // Clear the area in which the JPEG files are displayed. // Rect.x0 = BORDER_SIZE; Rect.y0 = YPOS_IMAGE; Rect.x1 = xSize - BORDER_SIZE - 1; Rect.y1 = ySize - BORDER_SIZE - 1; GUI_ClearRectEx(&Rect); // // Load image. // hFile = CreateFile(sFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); FileSize = GetFileSize(hFile, NULL); pFile = malloc(FileSize); ReadFile(hFile, pFile, FileSize, &NumBytesRead, NULL); CloseHandle(hFile); // // Check if the current JPEG image fits on the screen. // GUI_JPEG_GetInfo(pFile, FileSize, &Info); xSize -= BORDER_SIZE * 2 + 1; ySize -= YPOS_IMAGE + BORDER_SIZE + 1; // // Display the image centered. // xPos = BORDER_SIZE + (xSize - Info.XSize) / 2; yPos = YPOS_IMAGE + (ySize - Info.YSize) / 2; GUI_SetClipRect(&Rect); r = GUI_JPEG_Draw(pFile, FileSize, xPos, yPos); GUI_SetClipRect(NULL); if (r) { // // The image could not be displayed successfully. Show an error message. // GUI_DispStringInRectWrap(acError, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER, GUI_WRAPMODE_WORD); } else { GUI_Delay(2000); if ((Info.XSize > xSize) || (Info.YSize > ySize)) { // // Inform the user about the possibility of scaling JPEG images. // if (i == 0) { GUI_ClearRectEx(&Rect); GUI_DispStringInRectWrap("JPEG images can be scaled as it is shown in 2DGL_JPEG_DrawScaled.c.", &Rect, GUI_TA_BOTTOM | GUI_TA_HCENTER, GUI_WRAPMODE_WORD); GUI_Delay(3000); } i++; if (i == NUM_IMAGES_UNTIL_HINT) { i = 0; } } } free(pFile); }