/********************************************************************* * SEGGER MICROCONTROLLER SYSTEME GmbH * * Solutions for real time microcontroller applications * ********************************************************************** * * * (c) 1996 - 2004 SEGGER Microcontroller Systeme GmbH * * * * Internet: www.segger.com Support: support@segger.com * * * ********************************************************************** ***** emWin - Graphical user interface for embedded applications ***** emWin is protected by international copyright laws. Knowledge of the source code may not be used to write a similar product. This file may only be used in accordance with a license and should not be re- distributed in any way. We appreciate your understanding and fairness. ---------------------------------------------------------------------- File : 2DGL_DrawBMP.c Purpose : Example for drawing bitmap files ---------------------------------------------------------------------- */ #include #include #include "GUI.h" /********************************************************************* * * Static data * ********************************************************************** */ static char _acBuffer[0x1000]; /******************************************************************* * * Static functions * ******************************************************************** */ /********************************************************************* * * _GetData * * Purpose: * This routine is called by GUI_JPEG_DrawEx(). The routine is responsible * for setting the data pointer to a valid data location with at least * one valid byte. * * Parameters: * p - Pointer to application defined data. * NumBytesReq - Number of bytes requested. * ppData - Pointer to data pointer. This pointer should be set to * a valid location. * StartOfFile - If this flag is 1, the data pointer should be set to the * beginning of the data stream. * * Return value: * Number of data bytes available. */ static int _GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off) { DWORD NumBytesRead; HANDLE * phFile; phFile = (HANDLE *)p; /* * Check buffer size */ if (NumBytesReq > sizeof(_acBuffer)) { NumBytesReq = sizeof(_acBuffer); } /* * Set file pointer to the required position */ SetFilePointer(*phFile, Off, 0, FILE_BEGIN); /* * Read data into buffer */ ReadFile(*phFile, _acBuffer, NumBytesReq, &NumBytesRead, NULL); /* * Set data pointer to the beginning of the buffer */ *ppData = _acBuffer; /* * Return number of available bytes */ return NumBytesRead; } /******************************************************************* * * _ShowBMP * * Shows the contents of a bitmap file */ static void _ShowBMP(const char * sFilename) { int XSize, YSize, XPos, YPos; HANDLE hFile = CreateFile(sFilename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); GUI_ClearRect(0, 60, 319, 239); XSize = GUI_BMP_GetXSizeEx(_GetData, &hFile); YSize = GUI_BMP_GetYSizeEx(_GetData, &hFile); XPos = (XSize > 320) ? 0 : 160 - (XSize / 2); YPos = (YSize > 180) ? 60 : 150 - (YSize / 2); if (!GUI_BMP_DrawEx(_GetData, &hFile, XPos, YPos)) { GUI_Delay(2000); } CloseHandle(hFile); } /******************************************************************* * * _GetFirstBitmapDirectory * * Returns the first directory which contains one or more BMP files */ static int _GetFirstBitmapDirectory(char * pDir, char * pBuffer) { WIN32_FIND_DATA Context; char acMask[_MAX_PATH]; char acPath[_MAX_PATH]; HANDLE hFind; sprintf(acMask, "%s\\*.bmp", pDir); hFind = FindFirstFile(acMask, &Context); if (hFind != INVALID_HANDLE_VALUE) { strcpy(pBuffer, pDir); return 1; } sprintf(acMask, "%s\\*.", pDir); hFind = FindFirstFile(acMask, &Context); if (hFind != INVALID_HANDLE_VALUE) { do { if ((strcmp(Context.cFileName, ".") != 0) && (strcmp(Context.cFileName, "..") != 0)) { if (Context.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { sprintf(acPath, "%s\\%s", pDir, Context.cFileName); if (_GetFirstBitmapDirectory(acPath, pBuffer)) { return 1; } } } } while (FindNextFile(hFind, &Context)); } return 0; } /******************************************************************* * * _DrawWindowsDirectoryBitmaps * * Iterates over all *.bmp-files of the windows directory */ static void _DrawWindowsDirectoryBitmaps(void) { char acPath[_MAX_PATH]; char acMask[_MAX_PATH]; char acFile[_MAX_PATH]; char acBuffer[_MAX_PATH]; WIN32_FIND_DATA Context; HANDLE hFind; GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_Font24_ASCII); GUI_DispStringHCenterAt("DrawBMP - Sample", 160, 5); GUI_SetFont(&GUI_Font8x16); GetWindowsDirectory(acBuffer, sizeof(acBuffer)); _GetFirstBitmapDirectory(acBuffer, acPath); sprintf(acMask, "%s\\*.bmp", acPath); hFind = FindFirstFile(acMask, &Context); if (hFind != INVALID_HANDLE_VALUE) { do { sprintf(acFile, "%s\\%s", acPath, Context.cFileName); GUI_DispStringAtCEOL(acFile, 5, 40); _ShowBMP(acFile); } while (FindNextFile(hFind, &Context)); } } /********************************************************************* * * Public code * ********************************************************************** */ /********************************************************************* * * MainTask */ void MainTask(void) { GUI_Init(); while(1) { _DrawWindowsDirectoryBitmaps(); } } /*************************** End of file ****************************/