В основном пишу консольные программки, но возникла задача написать простенькую программку, которая бы выводила RGB битмап в окно. Раньше писал некоторые "графические" программки под винду, и как вывести изображение с помощью winapi в курсе. Сейчас же работаю в линуксах, и т.к. от гуи требуется только вывод одной картинки (хотя, было бы неплохо реализовать анимацию; но тоже в рамках простой смены кадров, которые выводились бы в определенную область окна) разбираться в графических библиотеках (wxWidgets, gtk, qt) лениво. Поэтому прошу знатоков привести пример простой программы создающей окно и отобразить на нем битмап. Либо ткнуть на уже готовый пример. Быстро пробежавшись по гуглу, осилил только создание главного окна используя wxWidgets (по gtk и qt еще не искал; исключительно субъективно — не хочется их трогать; хотя, если с их помощью можно решить задачу просто, то тоже пойдет).
#include <wx/wx.h>
using namespace std;
class MWND : public wxFrame
{
public:
MWND(const wxString& title);
};
MWND::MWND(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600))
{
Centre();
}
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
MWND *mwnd = new MWND(wxT("TITLE"));
// подозреваю, где-то здесь нужно что-то типа: mwnd->AddControl(new wxBitmap("tmp.bmp"))
mwnd->Show(true);
return true;
}
Все — дальше затык. Почитал (поискал по форуму) про wxBitmap — но как его "вставить" в окно так и не разобрался (в основном, все примеры на форуме http://wxforum.shadonet.com уж слишком монстрообразные и без разучивания апи мне не поддались
Еще хочу добавить: битмап генерируется непосредственно в памяти (т.е. на диск *.bmp не ложится), поэтому хотелось бы непосредственно выводить из: char *rgb_buf; //просто область памяти по три байта (rgb) на на пиксель. Но на данный момент это непринципиально...
Заранее благодарен
Сергей
03.03.08 13:28: Перенесено модератором из 'C/C++' — Odi$$ey
Re: wxWidgets: отобразить wxBitmap на wxFrame
От:
Аноним
Дата:
02.03.08 14:27
Оценка:
...
bool MyApp::OnInit()
{
MWND *mwnd = new MWND(wxT("TITLE"));
// подозреваю, где-то здесь нужно что-то типа: mwnd->AddControl(new wxBitmap("tmp.bmp"))
Таки я не ошибся:
new wxStaticBitmap(mwnd, wxID_ANY, wxBitmap(wxT("tmp.bmp")));
mwnd->>Show(true);
return true;
}
у wxWidgets очень толковая и вменяемая документация. вы не потеряете много времени, если ее попытаетесь осилить. также там есть куча сэмплов.
проклятый антисутенерский закон
Re[3]: wxWidgets: отобразить wxBitmap на wxFrame
От:
Аноним
Дата:
02.03.08 16:24
Оценка:
Здравствуйте, игппук, Вы писали:
И>у wxWidgets очень толковая и вменяемая документация. вы не потеряете много времени, если ее попытаетесь осилить. также там есть куча сэмплов.
Признаюсь — хотел сфилонить но таки пришлось бегло пройтись по документации. Сейчас пытаюсь прикрутить "анимацию". Застрял на обновлении битмапа. Т.е. у wxImage есть метод void SetData(unsigned char* data), но, подозреваю, нужно блитить битмап на DC фрейма. http://www.wxwidgets.org/wiki/index.php/WxBitmapButton
Разбираюсь с событиями... Эх... Читаю доки
анимацию можно на основе gif сделать. wxWidject умеет с ними работать. посмотрите в wxImage метод LoadFile и загрузите в него gif картинку. и еще посмотрите AddHandler. признаться, с гифами пока что не работал сам, но беглый просмотр документации показал, что копать можно в эту сторону.
проклятый антисутенерский закон
Re[5]: wxWidgets: отобразить wxBitmap на wxFrame
От:
Аноним
Дата:
02.03.08 19:10
Оценка:
Здравствуйте, игппук, Вы писали:
И>анимацию можно на основе gif сделать. wxWidject умеет с ними работать. посмотрите в wxImage метод LoadFile и загрузите в него gif картинку. и еще посмотрите AddHandler. признаться, с гифами пока что не работал сам, но беглый просмотр документации показал, что копать можно в эту сторону.
Эээ... Вероятно, я словом "анимация" ввел в заблуждение. Мне нужна, скорее, не анимация — в классическом понимании данного термина — а ренедеринг изображения. Т.е. каждый кадр будет новый, генерируемый динамически программой (соотв. gif тут не при делах). Фактически, это будет поток RGB фреймов, которые и нужно выводить на wxFrame. Аналогичную операцию я проворачивал под виндовс, суть понимаю, но лениво разбираться в апи графической либы под линукс (в этом и суть моих постов здесь). Но, как говорится: "Ленивый платит дважды..."
но ведь эти изображения будут получаться в виде файлов? если так, то просто используйте каждый раз LoadFile и SetData останется не при делах.
проклятый антисутенерский закон
Re[7]: wxWidgets: отобразить wxBitmap на wxFrame
От:
Аноним
Дата:
02.03.08 20:41
Оценка:
И>но ведь эти изображения будут получаться в виде файлов? если так, то просто используйте каждый раз LoadFile и SetData останется не при делах.
Вот как раз и нет. В том-то все и дело, что не фалы (иначе и вопроса не возникло). Ну, считайте, что я делаю игрушку (на самом деле это не так, но суть отрисовки изображения та же), и мне нужно без лишнего оверхида — не говоря уже о том, чтобы складывать кадр в файл и потом LoadFile — копировать определенный участок памяти (unsigned char *buf; который и есть сам сгенерированный кадр в формате rgb) прямо на форму. Сейчас ковыряю rawbmp.h
Re[8]: wxWidgets: отобразить wxBitmap на wxFrame
От:
Аноним
Дата:
02.03.08 22:00
Оценка:
И>>но ведь эти изображения будут получаться в виде файлов? если так, то просто используйте каждый раз LoadFile и SetData останется не при делах.
А>Вот как раз и нет. В том-то все и дело, что не фалы (иначе и вопроса не возникло). Ну, считайте, что я делаю игрушку (на самом деле это не так, но суть отрисовки изображения та же), и мне нужно без лишнего оверхида — не говоря уже о том, чтобы складывать кадр в файл и потом LoadFile — копировать определенный участок памяти (unsigned char *buf; который и есть сам сгенерированный кадр в формате rgb) прямо на форму. Сейчас ковыряю rawbmp.h