Кто-нибудь знает, могу ли я рисовать в окне изображения, используя CImg и C ++? - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь получить пользовательский ввод из окна изображения, используя библиотеку CImg и C ++.Я хочу, чтобы пользователь нарисовал фигуру в отображаемом окне, чтобы позже я мог сохранить и использовать их данные, но я не нашел ничего похожего на то, что я пытаюсь сделать.Мне просто интересно, если это возможно.

1 Ответ

0 голосов
/ 28 февраля 2019

Как правило, вам нужно настроить захват таких щелчков мыши следующим образом:

#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 каждый раз, когда пользователь нажимает, чтобы запомнить их.Предположительно, вы захотите при каждом щелчке проверять, находится ли текущая позиция щелчка в нескольких пикселях от начальной позиции, и если это так, закройте многоугольник, заполните его и добавьте в какой-либо список фигур.

...