display_image_nvg: a new tutorial about displaying images using nanovg

pull/3471/head
kallaballa 2 years ago
parent fd158a3800
commit 7fc418f8c0
  1. 2
      modules/v4d/CMakeLists.txt
  2. 36
      modules/v4d/samples/display_image_nvg.cpp

@ -196,6 +196,7 @@ if(NOT (TARGET ${the_module}))
if(EMSCRIPTEN)
add_emscripten_sample(example_v4d_display_image samples/display_image.cpp false)
add_emscripten_sample(example_v4d_display_image_fb samples/display_image_fb.cpp false)
add_emscripten_sample(example_v4d_display_image_nvg samples/display_image_nvg.cpp false)
add_emscripten_sample(example_v4d_vector_graphics samples/vector_graphics.cpp false)
add_emscripten_sample(example_v4d_vector_graphics_and_fb samples/vector_graphics_and_fb.cpp false)
add_emscripten_sample(example_v4d_render_opengl samples/render_opengl.cpp false)
@ -215,6 +216,7 @@ if(NOT (TARGET ${the_module}))
else()
add_binary_sample(example_v4d_display_image samples/display_image.cpp)
add_binary_sample(example_v4d_display_image_fb samples/display_image_fb.cpp)
add_binary_sample(example_v4d_display_image_nvg samples/display_image_nvg.cpp)
add_binary_sample(example_v4d_vector_graphics samples/vector_graphics.cpp)
add_binary_sample(example_v4d_vector_graphics_and_fb samples/vector_graphics_and_fb.cpp)
add_binary_sample(example_v4d_render_opengl samples/render_opengl.cpp)

@ -0,0 +1,36 @@
#include <opencv2/v4d/v4d.hpp>
#include <opencv2/imgcodecs.hpp>
using namespace cv;
using namespace cv::v4d;
using namespace cv::v4d::nvg;
int main() {
cv::Ptr<V4D> window = V4D::make(960, 960, "Display Image using NanoVG", false, false, 0);
#ifdef __EMSCRIPTEN__
string filename = "doc/lena.png";
#else
string filename = samples::findFile("lena.jpg");
#endif
Paint imagePaint;
int w, h;
window->nvg([&imagePaint, &w, &h, filename](const cv::Size sz) {
int img = createImage(filename.c_str(), NVG_IMAGE_NEAREST);
CV_Assert(img > 0);
imageSize(img, &w, &h);
imagePaint = imagePattern(0, 0, w, h, 0.0f/180.0f*NVG_PI, img, 1.0);
});
window->run([&imagePaint](Ptr<V4D> win){
win->nvg([&imagePaint](const cv::Size sz) {
beginPath();
scale(960.0/w, 960.0/h);
roundedRect(0,0, w, h, 5);
fillPaint(imagePaint);
fill();
});
//Displays the framebuffer in the window. Returns false if the windows has been closed.
return win->display();
});
}
Loading…
Cancel
Save