diff --git a/modules/v4d/CMakeLists.txt b/modules/v4d/CMakeLists.txt index 0d80c6724..9d2d75e05 100755 --- a/modules/v4d/CMakeLists.txt +++ b/modules/v4d/CMakeLists.txt @@ -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) diff --git a/modules/v4d/samples/display_image_nvg.cpp b/modules/v4d/samples/display_image_nvg.cpp new file mode 100644 index 000000000..31f79e1af --- /dev/null +++ b/modules/v4d/samples/display_image_nvg.cpp @@ -0,0 +1,36 @@ +#include +#include + +using namespace cv; +using namespace cv::v4d; +using namespace cv::v4d::nvg; + +int main() { + cv::Ptr 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 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(); + }); +}