natinusala / borealis

Hardware accelerated, controller and TV oriented UI library for PC and Nintendo Switch (libnx)
Apache License 2.0
254 stars 81 forks source link

Added Image::setImageFromMemory and Image::setImageFromRawData #162

Open iUltimateLP opened 3 years ago

iUltimateLP commented 3 years ago

Adds support to set the image resource a brls::Image view shows from memory using nanovg's nvgCreateImageMem.

natinusala commented 3 years ago

Hi, thanks for the PR!

This is a duplicate of #159 but I can merge whichever PR is finished first.

Do you think you could add a way to test / showcase this in the demo?

iUltimateLP commented 3 years ago

Ah didn't see the other PR :)

As for a demo case, I'd implement a new view element "DynamicImage" or something which generates a random Bitmap and renders that!

iUltimateLP commented 3 years ago

Had some nasty bugs with memory allocation, which is why I switched from nvgCreateImageMem (which was pretty unnessecary anyway since it needed a whole image "file" in memory rather than just a raw rgba array) to nvgCreateImageRGBA. Also implemented a little example in demo/dynamic_image and views/dynamicImage.xml. If you click on the image, it will populate with a gradient - let me know what you think!

natinusala commented 3 years ago

This is absolutely not the same, and if I were to choose I would keep the "from mem" instead of "from RGBA" method.

The "from mem" method is used to load JPG / PNG files from memory, and is actually currently used in the sys-clk manager to display game thumbnails. Any homebrew dealing with images on HOS would need it too (homebrew menu, qlaunch replacement, album replacement...).

I understand that it's hard to generate a random PNG in memory, so how about adding both methods and only making an example for thr RGBA one ?

iUltimateLP commented 3 years ago

See my latest commit, I had the same thought :P

natinusala commented 3 years ago

This is great! I feel like the example image is a little bit too big and too close to the other images (it's missing some padding).

Could you maybe make it a rectangle, like the "stretched" image example? And add some top padding. Thanks!

iUltimateLP commented 3 years ago

Sure, here you go :)

iUltimateLP commented 3 years ago

Any update @natinusala? :)