Как вывести изображение в wxWidgets

Написал одну программу на c++ с инструментарием wxWidgets. Очень долго пытался понять, как мне просто вывести изображение на экран. Пробовал всё и wxImage и wxBitmap и wxDC. Никак не получилось этого сделать. Примеры, которые есть в интернете тоже довольно трудные для понимания. Мне нужно просто вывести изображение, которое у меня будет лежать в папке с проектом и всё, мне ничего не надо с ним делать, ничего не нужно преобразовывать, оно никак не должно взаимодействовать с пользователем, просто вывести изображение и всё.


Ответы (1 шт):

Автор решения: Vladimir

Кое-что зависит от того, каким способом Вы хотите вывести изображение. Можно просто одноразово (используя wxClientDC, будет стерто при первом же сворачивании приложения), можно сделать так, чтобы оно оставалось перманентно в Вашем окне (через wxPaintDC). Раз Вы какое-то приложение уже написали, то я предположу, что Вы понимаете о чем речь. Я приведу пример для однократного вывода, а Вы уже сами пристройте в нужное место и с нужным контекстом. Я сделал кнопку на панели, по нажатию которой загружается картинка. Картинка выводится на специальную панель wxPanel *monitor (последняя, является членом какой_то-класс_окна окна). Но это не обязательно, главное получить нужный контекст dc, куда хотите "рисовать". Ну и еще, вывод рисунка я делал через wxMemoryDC, хотя это тоже не обязательно (вроде, для вывода рисунка напрямую можно использовать DrawBitmap(), но интереснее выводить именно через wxMemoryDC).

void какой_то-класс_окна::OnLoadImage(wxCommandEvent& event)
{
    wxClientDC dc(this->monitor);
    wxMemoryDC mdc;

    int w,h;
    dc.GetSize(&w, &h);

    wxImage img(wxT("cat.jpg"), wxBITMAP_TYPE_JPEG);

    wxBitmap cat(img.Scale(w,h,wxIMAGE_QUALITY_HIGH));
    mdc.SelectObject(cat);

    // очищать фон, вроде бы, не обязательно
    dc.SetBackground(*wxWHITE_BRUSH);
    dc.Clear();

    dc.Blit(0,0, cat.GetWidth(), cat.GetHeight(), &mdc, 0, 0,wxCOPY, 0);

    mdc.SelectObject(wxNullBitmap);
}
→ Ссылка