Работа с растровыми изображениями в WxWidgets

0

У меня есть следующий код, приведенный в книге "Кросс-платформенное графическое программирование с помощью wxWidgets", которое я читаю:

BEGIN_EVENT_TABLE(MyWindow, wxWindow)
  EVT_ERASE_BACKGROUND(MyWindow::OnErase)
END_EVENT_TABLE()

void MyWindow::OnErase(wxEraseEvent& event)
{
    wxClientDC* clientDC = NULL;
    if (!event.GetDC())
        clientDC = new wxClientDC(this);

    wxDC* dc = clientDC ? clientDC : event.GetDC() ;

    wxSize sz = GetClientSize();
    wxEffects effects;
    effects.TileBitmap(wxRect(0, 0, sz.x, sz.y), *dc, m_bitmap);

    if (clientDC)
        delete clientDC;
}

Этот код не показывает, как загрузить растровое изображение, поэтому после некоторого поиска в google я придумал:

wxBitmap m_bitmap;
bool result = m_bitmap.LoadFile("D:\image.png", wxBITMAP_TYPE_PNG);

Но это возвращает логический результат false что означает, что функция LoadFile не смогла загрузить файл. Я также попытался загрузить файл BMP, который тоже не работает.

Еще одна проблема, с которой я wxEffects заключается в том, что wxEffects отмечен устаревшим предупреждением.

Теги:
bitmap
wxwidgets

1 ответ

1
Лучший ответ

Вам нужно зарегистрировать обработчик изображения PNG, чтобы иметь возможность загружать растровые изображения PNG. Самый простой способ - вызвать функцию wxInitAllImageHandlers() в какой-то момент во время инициализации вашего приложения, например, в переопределенном MyApp::OnInit().

Что касается устаревших wxEffects, это происходит только потому, что книга довольно старая, и с тех пор изменилось немало вещей. Я настоятельно рекомендую вам ознакомиться с обзором важных изменений, если вы используете wxWidgets 3.0. И если вы этого не сделаете, я рекомендую вам еще сильнее использовать его.

  • 0
    Можете ли вы прокомментировать, почему MyApp::OnInit() является функцией переопределения? Например, даже если я удаляю virtual программа все равно работает отлично.
  • 0
    Это C ++, virtual не обязателен. Я рекомендую использовать override C ++ 11, если можете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню