To save memory I m using monochrome icon, CF_ALPHA_1BIT, so the fonction lv_img_set_zoom() don’t work for them.
Someone have a way or an idea to upscale them ? The operation need to be done only at start depending of the device resolution, so I haven’t performance issue.
why not make the icon larger using a paint program on a PC??
You do realize that alpha 1 bit color format is not for monochrome right?. You want to be using a 1 bit grayscale format which I am not sure is supported by LVGL. I see indexed color formats and your typical RGB color formats but nothing specifically intended for monochrome. I am assuming by monochrome you mean there is only 2 “colors” dark and light. That would be a 1 bit per pixel color format.
Someone else would have to chime in here on this.
What I am getting at is the color format you are using for a monochrome image is 16 bits per pixel and if you only have 2 color possibilities then using that color format is going to be a horrific waste of memory and also storage. If you used a monochrome image format that is 1 bit per pixel you could just make the size of the image larger in a paint program on a PC You would have top make the image some 16 times larger before it would end up using the same amount of ram/flash as the original sized one using a 16bpp color format.
a 20 x 20 image in 16bpp is going to take up 800 bytes of ram and I am not sure on the flash. with a 1bpp color format that same 20 x 20 image is going to take up 50 bytes or ram and it will look exactly identical if you are only using 2 colors. an 80 x 80 x 1bpp image takes up the same amount of ram as a 20 x 20 x 16bpp image if only 2 colors are being used.
See what I am getting at with this.
IDK if LVGL supports anything lower than a 16bpp color format. For some reason I don’t think it does.
My problem is to avoid to make more than 1 “icons set”, I prefer resize them during the application launch.
No one have already tried to create a icon dynamically using a small one ?
Else I can use the same C file for 2 formats (at least) and use #define to select one map or another. But it will mean more work, and only 2 sizes possibles.
I am not all that familiar with lvgl 8.3. you might need to upgrade to 9.0 in order to do it. I would have to look at the API. Maybe @kisvegabor would know to do what you want.
Just to confirm, so you have enough RAM to store the upscaled images, right? I want to clarify this first, as it’s very rare the you don’t have enough flash, but has plenty of RAM.
Yes, it’s not a RAM issue.
In fact the code can be used on different devices, with different resolutions. All the code is dynamic (I m using absolute values in percent), so widget dimension adapt themself to the resolution, but not icons.
If so, this feature of LVGL v9 could be really useful.
lv_image_set_inner_align(image, LV_IMAGE_ALIGN_STRETCH) automatically scales the image to cover the width/height you set. You need to use A8, as A1/2/4 cannot be scaled.