Complete this task as part of your GSoC application if you are applying for the AXIOM Remote related task.
This challenge is mandatory if you apply for T1126
---
Please follow the tasks closely and make sure to adhere to the C++ coding style (see links section for reference).
**Goal**
As addition to the 1 bit images/icon drawing which is basically limited to black/white or monochrome icons (https://github.com/apertus-open-source-cinema/AXIOM-Remote/blob/dev/Firmware/UI/Painter/Painter.cpp#L314) this challenge adds very soft antialiasing to images by using 2 bits and therefore 4 colors with a predefined palette (colors: transparent, light grey, dark grey, black).
This basically means we want to implement simplified anti-aliasing:
{F177091}
Complete this task as part of your GSoC application if you are applying for any AXIOM Remote related task.
This challenge is mandatory if you apply for T1126
---
Please follow the tasks closely and make sure to adhere to the C++ coding style (see links section for reference).
**Goal**
Current implementation of DrawImage() copies given image array to the framebuffer, but the full-blown size of image data with 3 channels and 8 bit depth is rather large, compared to the space on the microcontroller. Most of the time we don't require full colour for icons so the data can be kept as black and white (0 for black and 1 for white pixels).
**Step 1: Preparations**
- Check out the source code of AXIOM Remote, switch to **dev** branch for recent version
- **Important**: Don't forget to initialize git sub-modules in the repo, otherwise ImGui errors will occur
- Look through general source code and especially **Firmware** project and learn the structure
- Build the visualizer (**AXIOM_Remote_Firmware_Visualizer**) and play a bit with a firmware to understand it more
- Ask questions either here or on our IRC channel //(please use a dedicated client instead of web interface, to prevent regular disconnects)
Visualizer output:
{F117271}
**Step 2: Add Draw2BitIcon() in Painter**
Description: Recreate apertus° logo from the starting page of the firmware with 2 images and minimal data size, afterwards implement DrawIcon()
- Dissect the given apertus° logo (see //Media//, size 320 x 240 like the AXIOM Remote screen, background transparent) file into 2, one should contain //apertus// and the other //°//, try to keep them as small as possible
- Convert the images to 2 bit depth C image arrays, you can use online converters (see //Useful Links//)
- Add the data to the firmware in the proper folder
- Add draw method for icons to the painter
- Recreate the logo on the starting page with the new method, place //°// properly
**Step 3: Bonus**
- Add unit tests for Draw2BitIcon() method to verify that predefined input also deliver correct output, see examples in FirmwareTest folder, it already contains a few painter tests
- Add parameter to the Draw2BitIcon() method to define the color palette and transparency
- Adjust the logo on the starting page to correspond to the apertus° colors, see https://www.apertus.org/logo for corresponding colour for "Letter Grey Dark" and "Accent Orange", hint: don't forget to convert them to RGB565 value
---
**Useful Links:**
- Image converter: https://littlevgl.com/image-to-c-array
- C++ coding guidelines (isocpp): https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
To get in touch with any mentor check the [[ https://www.apertus.org/GSoC-Mentor-Contact-List | Mentor Contact List]].