有谁知道我是否可以使用 CImg 和 C++ 在图像 window 上绘图?
Does anyone know if I can draw on the image window using CImg and C++?
我正在尝试使用 CImg 库和 C++ 从图像 window 获取用户输入。我希望用户在显示的 window 上绘制一个形状,以便稍后保存和使用他们的数据,但我没有找到任何与我正在尝试做的相似的东西。我只是想知道是否有可能。
基本上,您需要像这样设置来捕获鼠标点击:
#include <iostream>
#include "CImg.h"
using namespace cimg_library;
int main(int argc,char **argv) {
// Load a background image
CImg<unsigned char> src("image.jpg");
unsigned char red[]={255,0,0};
// Display it
CImgDisplay disp(src,"Image");
// Remember position of last mouse click
int prev_x = -1;
int prev_y = -1;
// Main display loop
while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) {
CImgDisplay::wait(disp);
// When clicking on the image
if (disp.button()) {
int x = disp.mouse_x();
int y = disp.mouse_y();
std::cout << "x: " << x << ", y: " << y << std::endl;
if(prev_x!=-1){
src.draw_line(prev_x,prev_y,x,y,red).display(disp);
}
prev_x = x;
prev_y = y;
}
}
}
然后,您可以在每次用户点击时将 x,y
位置附加到 std::vector
,以便记住它们。据推测,您可能希望在每次点击时检查当前点击位置是否在起始位置的几个像素以内,如果是,则关闭多边形,填充它并将其添加到一些形状列表中。
我正在尝试使用 CImg 库和 C++ 从图像 window 获取用户输入。我希望用户在显示的 window 上绘制一个形状,以便稍后保存和使用他们的数据,但我没有找到任何与我正在尝试做的相似的东西。我只是想知道是否有可能。
基本上,您需要像这样设置来捕获鼠标点击:
#include <iostream>
#include "CImg.h"
using namespace cimg_library;
int main(int argc,char **argv) {
// Load a background image
CImg<unsigned char> src("image.jpg");
unsigned char red[]={255,0,0};
// Display it
CImgDisplay disp(src,"Image");
// Remember position of last mouse click
int prev_x = -1;
int prev_y = -1;
// Main display loop
while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) {
CImgDisplay::wait(disp);
// When clicking on the image
if (disp.button()) {
int x = disp.mouse_x();
int y = disp.mouse_y();
std::cout << "x: " << x << ", y: " << y << std::endl;
if(prev_x!=-1){
src.draw_line(prev_x,prev_y,x,y,red).display(disp);
}
prev_x = x;
prev_y = y;
}
}
}
然后,您可以在每次用户点击时将 x,y
位置附加到 std::vector
,以便记住它们。据推测,您可能希望在每次点击时检查当前点击位置是否在起始位置的几个像素以内,如果是,则关闭多边形,填充它并将其添加到一些形状列表中。