vs2019开发,还是有点不方便,图片还要编码,然后显示,着实不方便,下一步搞搞freetype也可以显示。
1、添加LV_PNG
官网上的lv_png拉取,但需要做些修改,静态画面显示没问题,但是让图标动起来,那就“出问题”,显示太慢了。分析源码,可以看出是直接读取文件在解码。
看源码lodepng.c line:418左右。
#ifdef LODEPNG_COMPILE_DISK//从硬盘读取文件并解码
/* returns negative value on error. This should be pure C compatible, so no fstat. */
static long lodepng_filesize(const char* filename)
{
#if LV_PNG_USE_LV_FILESYSTEM
lv_fs_file_t f;
lv_fs_res_t res = lv_fs_open(&f, filename, LV_FS_MODE_RD);
if(res != LV_FS_RES_OK) return -1;
uint32_t size = 0;
lv_fs_size(&f, &size);
lv_fs_close(&f);
return size;
#else
if (!strcmp(&filename[strlen(filename) - 3], "png"))
{
long size;
FILE* file;
file = fopen(filename, "rb");
if (!file) return -1;
if (fseek(file, 0, SEEK_END) != 0)
{
fclose(file);
return -1;
}
size = ftell(file);
/* It may give LONG_MAX as directory size, this is invalid for us. */
if (size == LONG_MAX) size = -1;
fclose(file);
return size;
}
#endif
}
/* load file into buffer that already has the correct allocated size. Returns error code.*/
static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename)
{
#if LV_PNG_USE_LV_FILESYSTEM
lv_fs_file_t f;
lv_fs_res_t res = lv_fs_open(&f, filename, LV_FS_MODE_RD);
if(res != LV_FS_RES_OK) return 78;
uint32_t br;
res = lv_fs_read(&f, out, size, &br);
if(res != LV_FS_RES_OK) return 78;
if (br != size) return 78;
lv_fs_close(&f);
return 0;
#else
if (!strcmp(&filename[strlen(filename) - 3], "png"))
{
FILE* file;
size_t readsize;
file = fopen(filena