Как использовать bmp картинки из п Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Как использовать bmp картинки из п

Post by midisa »

Поставил в проект тулбар, добавил кнопочки с картинками. Указал ссылки на кнопочки. Пеересобрал проект. При запуске выдается это сообщение. No handler found for image type.

В винде то я просто делал, добавил в ресурсы, а в программе уже указывал имя ресурса.
Как правильно в нетбинсе сделать?
В линуксе ресурсы должны идти отдельно или они линкуются к проекту?
Расскажите правильную последовательность действий.
Большое спасибо за Вашу помощь.
Last edited by midisa on Fri Jul 23, 2010 12:14 pm, edited 1 time in total.
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Re: No handler found for image type.

Post by borr_1 »

а в OnInit() у приложения у тебя стоит что-то типа wxInitAllImageHandlers() ?
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Я стал картинки подключать bmp и все стало отображаться нормально. Но у меня есть вопрос. Сейчас я беру картинки из внешних файлов. Как мне брать картинки из ресурсов программы?

В ресурсы добавил картинки (работаю в NetBeans), по размеру запускаемого файла видно что картинки были добавлены.
Теперь нужно сделать так, чтобы программа отображала картинки на кнопочках не из внешних файлов а из ресурсов.

В wxFormBuilder'e указываю, брать из ресурсов, но при запуске программа ругается. Нужно просто имя файла указывать или идентификатор?
Можете подробнее этот момент рассказать?
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Я стал картинки подключать bmp и все стало отображаться нормально. Но у меня есть вопрос. Сейчас я беру картинки из внешних файлов. Как мне брать картинки из ресурсов программы?

В ресурсы добавил картинки (работаю в NetBeans), по размеру запускаемого файла видно что картинки были добавлены.
Теперь нужно сделать так, чтобы программа отображала картинки на кнопочках не из внешних файлов а из ресурсов.

В wxFormBuilder'e указываю, брать из ресурсов, но при запуске программа ругается (No image handler for type 2 defined.). Нужно просто имя файла указывать или идентификатор?
Можете подробнее этот момент рассказать?
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Я стал картинки подключать bmp и все стало отображаться нормально. Но у меня есть вопрос. Сейчас я беру картинки из внешних файлов. Как мне брать картинки из ресурсов программы?

В ресурсы добавил картинки (работаю в NetBeans), по размеру запускаемого файла видно что картинки были добавлены.
Теперь нужно сделать так, чтобы программа отображала картинки на кнопочках не из внешних файлов а из ресурсов.

В wxFormBuilder'e указываю, брать из ресурсов, но при запуске программа ругается (No image handler for type 2 defined.). Нужно просто имя файла указывать или идентификатор?
Можете подробнее этот момент рассказать?
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 »

в xpm перегони и подключай этот файл к проекту
http://forums.wxwidgets.org/viewtopic.p ... hlight=ico
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

borr_1 wrote:в xpm перегони и подключай этот файл к проекту
http://forums.wxwidgets.org/viewtopic.p ... hlight=ico
1. Я не понял что там написано.
2. Если таскать файлы с проектом, то какая разница в каком формате? ...

Как использовать картинки bmp прямо из ресурсов?
P.S. Форум временами так сильно тормозит ... его что досят?
private_joker
Earned a small fee
Earned a small fee
Posts: 12
Joined: Tue Nov 24, 2009 6:26 pm

Post by private_joker »

Packaging Bitmap Resources
If you come from a Windows programming background, you are accustomed to loading bitmaps from the resource section of the executable. You can still do this by passing a resource name and the wxBITMAP_TYPE_BMP_RESOURCE type to the constructor, but you are likely to want a less platform-specific method.

A portable way to package resources, whether they are bitmaps, HTML files, or other files required by an application, is to store them in a single zip file alongside the executable or in a separate data folder. Then you can use the virtual file system functionality in wxWidgets to load the image directly from the zip file, as the following fragment shows.

Code: Select all

// Create a new file system object
wxFileSystem*fileSystem = new wxFileSystem;

wxString archiveURL(wxT("myapp.bin"));
wxString filename(wxT("myimage.png"));
wxBitmapType bitmapType = wxBITMAP_TYPE_PNG;

// Create a URL
wxString combinedURL(archiveURL + wxString(wxT("#zip:")) + filename);
wxImage image;
wxBitmap bitmap;

// Open the file in the archive
wxFSFile* file = fileSystem->OpenFile(combinedURL);
if (file)
{
    wxInputStream* stream = file->GetStream();

    // Load and convert to a bitmap
    if (image.LoadFile(* stream, bitmapType))
        bitmap = wxBitmap(image);

    delete file;
}
delete fileSystem;

if (bitmap.Ok())
{
    ...
}


Использую последний способ. Можно конвертить в C-array и встраивать в проект ( http://wiki.wxwidgets.org/Embedding_PNG_Images ) с помощью: http://priyank.co.in/sites/default/files/bin2c.7z Но тут надо варнинги "давить". Где-то видел более подробный пример по ембеддеду, но сходу ссылку не вспомню.
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex »

Для подгрузки из ресурсов вроде есть макросы специальные - wxBITMAP() и wxICON() - туда надо строковое имя ресурса скармливать без кавычек. wxICON точно есть
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

T-Rex wrote:Для подгрузки из ресурсов вроде есть макросы специальные - wxBITMAP() и wxICON() - туда надо строковое имя ресурса скармливать без кавычек. wxICON точно есть
А как сделать так, чтобы руками не изменять? Я сделал проект в wxFormBuilder'е если я внесу изменения, билдер в очередной раз мне все мои изменения снесет.

Я указываю в билдере чтобы он брал картинки из ресурсов. программа при запуске ругается (не по русски). Чего то у нее не получается сделать. Но ресурс как я понял она находит т.к. если имя ресурса изменить, то ругается по другому, примерно так: ... not found ...
В общем нужно как то прямо в билдете указывать имена картинок, а что дальше не понятно.
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex »

В первлм ответе есть решение. Проинициализировать все хэндлеры. Ну а так, дал бы хоть скрины ошибок.
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

T-Rex wrote:В первлм ответе есть решение. Проинициализировать все хэндлеры. Ну а так, дал бы хоть скрины ошибок.
Пишет такое сообщение.
No image handler for type 2 defined.

Картинка не загружается.
В инит ту строчку добавил...
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Может кто то подскажет как сделать так, чтобы брались картинки из запускаемого файла?

Никто картинки не использует на кнопках?

Смотрите приложенный файл. Есть программа. Если запускать ее не из этой директории (куда распаковали), а по ссылке например с рабочего стола, то программа ищет картинки в той директории из которой ее запускают. т.е. будет искать картинки на рабочем стола.
Нужно сделать так, чтобы программа брала картинки из ресурсов программы.

Помогите пожалуйста кто знает.
Attachments
GNU-Linux-x86.tar.gz
(77.25 KiB) Downloaded 210 times
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Открыл файл gui.cpp в нем написано:
Эта кнопка берется из ресурсов:
m_bp_add = new wxBitmapButton( this, wxID_ANY, wxBitmap( wxT("res/add.bmp"), wxBITMAP_TYPE_RESOURCE ), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
bSizer111->Add( m_bp_add, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
Эта кнопка из внешнего файла:
m_bp_change = new wxBitmapButton( this, wxID_ANY, wxBitmap( wxT("res/CHANGE.bmp"), wxBITMAP_TYPE_ANY ), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
bSizer111->Add( m_bp_change, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );

Ругается на кнопку которая берется из ресурсов.
Post Reply