parent
7012e64a14
commit
2ab459598c
@ -0,0 +1,48 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2024 jacqueline <me@jacqueline.id.au> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-3.0-only |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "screenshot.hpp" |
||||||
|
#include <sys/_stdint.h> |
||||||
|
|
||||||
|
#include <string> |
||||||
|
|
||||||
|
#define LODEPNG_NO_COMPILE_CPP |
||||||
|
#include "libs/lodepng/lodepng.h" |
||||||
|
|
||||||
|
#include "esp_log.h" |
||||||
|
#include "lvgl.h" |
||||||
|
|
||||||
|
namespace ui { |
||||||
|
|
||||||
|
[[maybe_unused]] static constexpr char kTag[] = "screenshot"; |
||||||
|
|
||||||
|
auto SaveScreenshot(lv_obj_t* obj, const std::string& path) -> void { |
||||||
|
lv_draw_buf_t* buf = lv_snapshot_take(obj, LV_COLOR_FORMAT_RGB888); |
||||||
|
if (!buf) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// LVGL appears to output BGR data instead. Not quite sure why, but swapping
|
||||||
|
// each pair is quite easy.
|
||||||
|
for (size_t i = 0; i < buf->data_size; i += 3) { |
||||||
|
uint8_t temp = buf->data[i]; |
||||||
|
buf->data[i] = buf->data[i + 2]; |
||||||
|
buf->data[i + 2] = temp; |
||||||
|
} |
||||||
|
|
||||||
|
// The LVGL lodepng fork uses LVGL's file API, so an extra '/' is needed.
|
||||||
|
std::string fullpath = "//sdcard/" + path; |
||||||
|
|
||||||
|
auto res = lodepng_encode_file(fullpath.c_str(), buf->data, buf->header.w, |
||||||
|
buf->header.h, LCT_RGB, 8); |
||||||
|
|
||||||
|
lv_draw_buf_destroy(buf); |
||||||
|
if (res != 0) { |
||||||
|
ESP_LOGE(kTag, "lodepng error: '%s'", lodepng_error_text(res)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} // namespace ui
|
@ -0,0 +1,17 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2024 jacqueline <me@jacqueline.id.au> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-3.0-only |
||||||
|
*/ |
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <string> |
||||||
|
|
||||||
|
#include "lvgl.h" |
||||||
|
|
||||||
|
namespace ui { |
||||||
|
|
||||||
|
auto SaveScreenshot(lv_obj_t* obj, const std::string& path) -> void; |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue