You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
So I tried to use this library for fetching necessary information, along with LVGL running on ESP32, and after I follow the example code using createArray(), the decoding does works and does splitting out image data. Now, after I tried to modify it to work with LVGL and use it to display an image from the extracted data.
All I got was a completely destroyed/blurred/interferences image.
Sometimes, when the image got too big I also got a Guru Meditation error
Libraries that I'm using
LVGL v8.0, JpegDecoder, LovyanGFX
Here is my code
lv_img_dsc_t *image;
voidloadimage(String filename, lv_img_dsc_t *img)
{
File file = SD.open(filename, FILE_READ); // or, file handle reference for SD libraryif (!file) return;
bool dec = JpegDec.decodeSdFile(filename);
if (!dec) return;
Serial.printf("Width: %d, Height: %d\n", JpegDec.width, JpegDec.height);
Serial.printf("Size: %d bytes\n", JpegDec.width*JpegDec.height);
Serial.printf("File size: %d bytes\n", file.size());
Serial.println("\n\n");
uint8_t *imagemap = newuint8_t[file.size()];
int pos = 0;
while (file.available())
{
uint8_t data = file.read();
imagemap[pos] = data;
pos++;
}
Serial.printf("pos: %d\n", pos);
file.close();
lv_img_dsc_t image = {
{
LV_IMG_CF_TRUE_COLOR, // Header CF0, // header.alwayszero0, // Unknown
JpegDec.width, // Width
JpegDec.height, // height
},
JpegDec.width * JpegDec.height * LV_COLOR_SIZE / 8, // data size
imagemap // data
};
memcpy(img, &image, sizeof(lv_img_dsc_t));
return;
}
voidinitLVGL() {
display.clear();
display.setSwapBytes(true); //Needed for LVGL graphicslv_init();
lv_disp_draw_buf_init(&draw_buf, buf1, NULL, TFT_WIDTH * TFT_HEIGHT / 10); /*Initialize the display buffer.*/lv_disp_drv_init(&disp_drv); /*Basic initialization*/
disp_drv.flush_cb = my_disp_flush; /*Set your driver function*/
disp_drv.draw_buf = &draw_buf; /*Assign the buffer to the display*/
disp_drv.hor_res = TFT_WIDTH; /*Set the horizontal resolution of the display*/
disp_drv.ver_res = TFT_HEIGHT; /*Set the vertical resolution of the display*///LVGL registeringlv_disp_t *disp = lv_disp_drv_register(&disp_drv);
lv_indev_drv_init(&indev_drv); /*Basic initialization*/
indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/
indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/lv_indev_drv_register(&indev_drv); /*Finally register the driver*/
disp->refr_timer->period = (uint32_t)(1000 / FPS);
//Create a themeloadimage("/images/image1.jpg", image);
theme = lv_img_create(lv_scr_act());
lv_img_set_src(theme, image);
lv_obj_set_width(theme, LV_SIZE_CONTENT); /// 1lv_obj_set_height(theme, LV_SIZE_CONTENT);
lv_obj_set_align(theme, LV_ALIGN_CENTER);
}
If you recognize any problems in the code, please help me.
Thanks!
The text was updated successfully, but these errors were encountered:
The issue
So I tried to use this library for fetching necessary information, along with LVGL running on ESP32, and after I follow the example code using createArray(), the decoding does works and does splitting out image data. Now, after I tried to modify it to work with LVGL and use it to display an image from the extracted data.
All I got was a completely destroyed/blurred/interferences image.
Sometimes, when the image got too big I also got a Guru Meditation error
Libraries that I'm using
LVGL v8.0, JpegDecoder, LovyanGFX
Here is my code
If you recognize any problems in the code, please help me.
Thanks!
The text was updated successfully, but these errors were encountered: