Как вывести изображение в wxWidgets
Написал одну программу на c++ с инструментарием wxWidgets. Очень долго пытался понять, как мне просто вывести изображение на экран. Пробовал всё и wxImage и wxBitmap и wxDC. Никак не получилось этого сделать. Примеры, которые есть в интернете тоже довольно трудные для понимания. Мне нужно просто вывести изображение, которое у меня будет лежать в папке с проектом и всё, мне ничего не надо с ним делать, ничего не нужно преобразовывать, оно никак не должно взаимодействовать с пользователем, просто вывести изображение и всё.
Ответы (1 шт):
Кое-что зависит от того, каким способом Вы хотите вывести изображение. Можно просто одноразово (используя 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);
}