Removed the 64K limitation on the icon file size.

This commit is contained in:
Stephen White 2019-11-16 16:49:28 +11:00
parent a22005971a
commit 9c75e0bb97
2 changed files with 26 additions and 25 deletions

View file

@ -820,7 +820,7 @@ bool FileBrowser::CheckForPNG(const char* filename, FILINFO& filIcon)
strcat(fileName, ".png");
if (f_stat(fileName, &filIcon) == FR_OK && filIcon.fsize < FILEBROWSER_MAX_PNG_SIZE)
if (f_stat(fileName, &filIcon) == FR_OK)
foundValid = true;
}
}
@ -829,7 +829,7 @@ bool FileBrowser::CheckForPNG(const char* filename, FILINFO& filIcon)
void FileBrowser::DisplayPNG(FILINFO& filIcon, int x, int y)
{
if (filIcon.fname[0] != 0 && filIcon.fsize < FILEBROWSER_MAX_PNG_SIZE)
if (filIcon.fname[0] != 0)
{
FIL fp;
FRESULT res;
@ -837,28 +837,33 @@ void FileBrowser::DisplayPNG(FILINFO& filIcon, int x, int y)
res = f_open(&fp, filIcon.fname, FA_READ);
if (res == FR_OK)
{
u32 bytesRead;
SetACTLed(true);
f_read(&fp, PNG, FILEBROWSER_MAX_PNG_SIZE, &bytesRead);
SetACTLed(false);
f_close(&fp);
char* PNG = (char*)malloc(filIcon.fsize);
if (PNG)
{
u32 bytesRead;
SetACTLed(true);
f_read(&fp, PNG, filIcon.fsize, &bytesRead);
SetACTLed(false);
f_close(&fp);
int w;
int h;
int channels_in_file;
stbi_uc* image = stbi_load_from_memory((stbi_uc const*)PNG, bytesRead, &w, &h, &channels_in_file, 4);
int w;
int h;
int channels_in_file;
stbi_uc* image = stbi_load_from_memory((stbi_uc const*)PNG, bytesRead, &w, &h, &channels_in_file, 4);
#if not defined(EXPERIMENTALZERO)
if (image && (w == PNG_WIDTH && h == PNG_HEIGHT))
{
//DEBUG_LOG("Opened PNG %s w = %d h = %d cif = %d\r\n", fileName, w, h, channels_in_file);
screenMain->PlotImage((u32*)image, x, y, w, h);
}
else
{
//DEBUG_LOG("Invalid PNG size %d x %d\r\n", w, h);
}
if (image && (w == PNG_WIDTH && h == PNG_HEIGHT))
{
//DEBUG_LOG("Opened PNG %s w = %d h = %d cif = %d\r\n", fileName, w, h, channels_in_file);
screenMain->PlotImage((u32*)image, x, y, w, h);
}
else
{
//DEBUG_LOG("Invalid PNG size %d x %d\r\n", w, h);
}
#endif
free(PNG);
}
}
}
else
@ -874,7 +879,7 @@ void FileBrowser::DisplayPNG()
{
FileBrowser::BrowsableList::Entry* current = folder.current;
u32 x = screenMain->ScaleX(1024) - PNG_WIDTH;
u32 y = screenMain->ScaleY(666) - PNG_HEIGHT;
u32 y = screenMain->ScaleY(616) - PNG_HEIGHT;
DisplayPNG(current->filIcon, x, y);
}
#endif

View file

@ -45,8 +45,6 @@
#define VIC2_COLOUR_INDEX_LBLUE 14
#define VIC2_COLOUR_INDEX_LGREY 15
#define FILEBROWSER_MAX_PNG_SIZE 0x10000
#define STATUS_BAR_POSITION_Y (40 * 16 + 10)
#define KEYBOARD_SEARCH_BUFFER_SIZE 512
@ -253,7 +251,5 @@ private:
float scrollHighlightRate;
bool displayingDevices;
char PNG[FILEBROWSER_MAX_PNG_SIZE];
};
#endif