wxWidgets Рисование изображения с помощью Обновить - PullRequest
2 голосов
/ 13 мая 2011

У меня есть приложение, которое получает изображения с камеры.Приложение написано с использованием wxWidgets, и я пытаюсь отобразить изображение, создав событие рисования.Каждый раз, когда я получаю новое изображение, я вызываю «Обновить» на панели.

Примерно через полминуты-минуты он перестает реагировать на события рисования.Я смотрю на wxWidgets Wiki, но не могу понять, почему он это делает (я полагаю, что разрешаю запускать цикл событий GUI).

Когда я изменяю размер окна,оно обновляет изображение как обычно (поэтому оно не блокирует все события рисования).

Есть идеи, почему это происходит?

Я не уверен, насколько это поможет, но вот краскакод события.

void ImageViewer::onPaint(wxPaintEvent &event)
{
    wxBufferedPaintDC dc(this);

    cv::Mat buffer;
    static int count = 0;
    std::cout << "drawing " << ++count << std::endl;
    {
        // doing stuff in a lock
    }
    // it doesn't ever seem to get stuck in the lock
    std::cout << "finished" << std::endl;

    // buffer is an object with the image data buffered
    wxImage img(buffer.rows,
                buffer.cols,
                buffer.data, true);

    wxBitmap bmp(img);
    dc.DrawBitmap(bmp, 0, 0);
}

Я вызываю refresh каждый раз, когда получаю новое изображение и меняю буфер (смена буфера выполняется внутри замка).

1 Ответ

4 голосов
/ 13 мая 2011

Вот что нужно попробовать: вызвать Update () сразу после вашего вызова Refresh ().

Обновление делает окно недействительным и ставит в очередь запрос на рисование.Обновление вызывает немедленную перерисовку любых недействительных прямоугольников.

...