有谁知道我是否可以使用CImg和C ++在图像窗口上绘制图像?

时间:2019-02-16 18:45:48

标签: c++ graphics cimg

我正在尝试使用CImg库和C ++从图像窗口获取用户输入。我希望用户在显示的窗口上绘制形状,以便以后保存和使用他们的数据,但是我没有找到任何与我想做的事情相似的事情。我只是想知道是否有可能。

1 个答案:

答案 0 :(得分:0)

基本上,您需要进行设置以捕获鼠标单击,如下所示:

#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;
    }
  }
}

enter image description here

然后,您将在每次用户单击时将x,y位置附加到std::vector上,以便记住它们。大概,您将需要检查每次单击,当前单击位置是否在开始位置的几个像素之内,如果是,则关闭多边形,填充该多边形并将其添加到某些形状列表中。