mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-02-19 23:15:05 +00:00
- Added screenshot app & service (PC-only for now) - Updated docs with screenshots and new device photo - Add fake statusbar icons for PC/sim build - added `lv_screenshot` library based on `lv_100ask_screenshot` from https://github.com/100askTeam/lv_lib_100ask - T-Deck WiFi is now allocated into SPI RAM - Created `tt_service_find()` to find services by their id
68 lines
3.0 KiB
C
68 lines
3.0 KiB
C
#include "lv_screenshot.h"
|
|
|
|
#include "save_bmp.h"
|
|
#include "save_png.h"
|
|
|
|
static void data_pre_processing(lv_img_dsc_t* snapshot, uint16_t bpp, lv_100ask_screenshot_sv_t screenshot_sv);
|
|
|
|
bool lv_screenshot_create(lv_obj_t* obj, lv_img_cf_t cf, lv_100ask_screenshot_sv_t screenshot_sv, const char* filename) {
|
|
lv_img_dsc_t* snapshot = lv_snapshot_take(obj, cf);
|
|
|
|
if (snapshot) {
|
|
data_pre_processing(snapshot, LV_COLOR_DEPTH, screenshot_sv);
|
|
|
|
if (screenshot_sv == LV_100ASK_SCREENSHOT_SV_PNG) {
|
|
if (LV_COLOR_DEPTH == 16) {
|
|
lv_screenshot_save_png_file(snapshot->data, snapshot->header.w, snapshot->header.h, 24, filename);
|
|
} else if (LV_COLOR_DEPTH == 32) {
|
|
lv_screenshot_save_png_file(snapshot->data, snapshot->header.w, snapshot->header.h, 32, filename);
|
|
}
|
|
} else if (screenshot_sv == LV_100ASK_SCREENSHOT_SV_BMP) {
|
|
if (LV_COLOR_DEPTH == 16) {
|
|
lve_screenshot_save_bmp_file(snapshot->data, snapshot->header.w, snapshot->header.h, 24, filename);
|
|
} else if (LV_COLOR_DEPTH == 32) {
|
|
lve_screenshot_save_bmp_file(snapshot->data, snapshot->header.w, snapshot->header.h, 32, filename);
|
|
}
|
|
}
|
|
|
|
lv_snapshot_free(snapshot);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
static void data_pre_processing(lv_img_dsc_t* snapshot, uint16_t bpp, lv_100ask_screenshot_sv_t screenshot_sv) {
|
|
if (bpp == 16) {
|
|
uint16_t rgb565_data = 0;
|
|
uint32_t count = 0;
|
|
for (int w = 0; w < snapshot->header.w; w++) {
|
|
for (int h = 0; h < snapshot->header.h; h++) {
|
|
rgb565_data = (uint16_t)((*(uint8_t*)(snapshot->data + count + 1) << 8) | *(uint8_t*)(snapshot->data + count));
|
|
if (screenshot_sv == LV_100ASK_SCREENSHOT_SV_PNG) {
|
|
*(uint8_t*)(snapshot->data + count) = (uint8_t)(((rgb565_data) >> 11) << 3);
|
|
*(uint8_t*)(snapshot->data + count + 1) = (uint8_t)(((rgb565_data) >> 5) << 2);
|
|
*(uint8_t*)(snapshot->data + count + 2) = (uint8_t)(((rgb565_data) >> 0) << 3);
|
|
} else if (screenshot_sv == LV_100ASK_SCREENSHOT_SV_BMP) {
|
|
*(uint8_t*)(snapshot->data + count) = (uint8_t)(((rgb565_data) >> 0) << 3);
|
|
*(uint8_t*)(snapshot->data + count + 1) = (uint8_t)(((rgb565_data) >> 5) << 2);
|
|
*(uint8_t*)(snapshot->data + count + 2) = (uint8_t)(((rgb565_data) >> 11) << 3);
|
|
}
|
|
|
|
count += 3;
|
|
}
|
|
}
|
|
} else if ((screenshot_sv == LV_100ASK_SCREENSHOT_SV_PNG) && (bpp == 32)) {
|
|
uint8_t tmp_data = 0;
|
|
uint32_t count = 0;
|
|
for (int w = 0; w < snapshot->header.w; w++) {
|
|
for (int h = 0; h < snapshot->header.h; h++) {
|
|
tmp_data = *(snapshot->data + count);
|
|
*(uint8_t*)(snapshot->data + count) = *(snapshot->data + count + 2);
|
|
*(uint8_t*)(snapshot->data + count + 2) = tmp_data;
|
|
count += 4;
|
|
}
|
|
}
|
|
}
|
|
}
|