Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка bitmap из ресурсов, камни, камни - они приследуют меня:) 
V
    Опции темы
ASMatic
Дата 22.6.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



Здравствуйте ВИНградовцы - пришел я к вам с кучей вопросов после многих поисков)

Решил вот попробовать свои силы в VC++2008 и не долго думая начал все с создания собственного интерфейса. Все шло норм пока не дошло к загрузке БМП с ресурсов.

Bitmap->FromResource оказался не рабочим - пол ночи пытался загрузить и нарекал на незнание VC и работы с ресурсами - потом нашел на каком то форуме топик в котором говорилось что этот метод не особо дружит с *.bmp ,как оказалось - действительно FindResource и LoadResource прекрасно справились с задачей. Но всплыл другой момент - как передать HGLOBAL в bitmap?? Придумался (точнее в том же топике предлагалось)) - через MemoryStream-ы. Начал копать в их сторону( MemoryStream *ms = new... не хотел компалится)) Оказалось все не так как в BCB TMemoryStream-ы. Как вычитал что в VC++ нету совего класса и юзает он .NET . Но что за бред - не у всех же стоит .NET и что делать, таскать с собой библиотеки .NET или вообще юзеру сообщухи выдавать - "поставь себе .NET ,его мона скачать на микрософт.ком". 

Подскажите плз что можна придумать в этом варианте smile 

ПС  в темы такое название, так как уверен что еще не раз придется спросить по дороге к завершению моего интерфейса.
PM MAIL   Вверх
mes
Дата 22.6.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(ASMatic @  22.6.2009,  18:26 Найти цитируемый пост)
ПС  в темы такое название, так как уверен что еще не раз придется спросить по дороге к завершению моего интерфейса. 

Одна тема - один вопрос.



--------------------
PM MAIL WWW   Вверх
Earnest
Дата 22.6.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(ASMatic @  22.6.2009,  20:26 Найти цитируемый пост)
ПС  в темы такое название, так как уверен что еще не раз придется спросить по дороге к завершению моего интерфейса. 

Нет уж, темы создавай по существу, по мере возникновения вопросов. Правила форума запрещают все в кучу валить.

Насчет bmp, ничего не поняла, какие такие FromResource и NET. Ты уверен, что на MFC пишешь?
В MFC и WinAPi есть LoadBitmap, прекрасно работающий. Что касается HGLOBAL, возвращаемого LoadResourse, то это и есть по cути адрес буфера, содержащего битмап. Если приспичило читать прямо, то ищи в MSDN описание формата ресурса (не уверена, что там чистый bmp). Но у меня никогда такой надобности не возникало, т.к. LoadBitmap всегда справлялся.



--------------------
...
PM   Вверх
ASMatic
Дата 22.6.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



Извиняюсь за название темы smile 

по поводу MFC - думаю что я не под ним пишу) - создаю прожект - ПОЛНОСТЬЮ чистый,там галочка есть такая при создании.
Создаю окошко (форму) и все остальное вручную - не знаю почему, но так решил - с чистого листаsmile
Битмап гружу с помощью GDI :

Код

Gdplus::Bitmap *bmp = new Bitmap( hInstance, L"#102" ); // эт я с ресурсов пытался таким методом.


Например я заюзаю апишку LoadBitmap - будет у меня она в памяти,а как вывести в окно тогда?
я выводил:
Код

Gdiplus::Graphics graphics( hdc );
graphics.DrawImage( pbmp, xPos, yPos );

там без поинтера на Image (Bitmap) - ничего не поделать. Когда я сделал:

bmp->FromHBITMAP((HBITMAP) LoadResource( NULL, FindResource( NULL, "#102", RT_BITMAP )), NULL);

ничего не грузит.Думал воспользоватся методом bmp->FromStream() - но с потоками напряг - без .NET (как я вычитал) - не канают.....

Может я и ошибаюсь - подскажите тогда как создать MemoryStream в msvc. Или как вывести битмап в окно smile  Оч желательно сразу с пару строчечками,а то могу чего недопонятьsmile

PM MAIL   Вверх
ASMatic
Дата 23.6.2009, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



ну что сказать - нашел как стримами без .НЕТ пользоватся - CreateStreamOnHGlobal. Но вот уже пошел на крайности и просто за капипастил себе в прожект чужие исходники - тож самое - не лоадит,в памяти есть моя картинка а в битмап не хочет грузить(( и к стати в памяти моя картинка получается без заголовка бмп-шного - эт так должно быть???
появился вариант - не правильно загружаю в ресурсы свой картинка. Подскажите как ето правильно делать smile  smile  smile 

Мой вариант:
слева,где мона добавлять файлі в прожект есть Resource Files. Правая кнопка- >Add-> New Item->Resource File (.rs) добавил....потом клик-клик по тому файлу(как понял - редактируем) - ну и правая кнопочка - Add Resource->Bitmap ну и путь к файлу. вот так я это делаю) - мож чё не правльно и сильно смущает меня то что в памяти бмп без своего родненького заголовка. Указываю тип при загрузке (RT_BITMAP) но это же только в хорошо работающем LoadResource а не в Gdiplus::Bitmap.FromResource в котором не указывается тип загружаемого фойла,хотя и так понятно БИТМАП smile 
карочь мозги плывут - выхода не вижу,но папку с рисуночками рядом ложить - тоже бред полный smile 

подскажите ПЛЗ!!!!ПОЖАЙЛУСТАААААА smile 
PM MAIL   Вверх
Andrey44
Дата 23.6.2009, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Код

bool LoadImageFromResource(UINT res, LPCTSTR pType, HMODULE hInst, Gdiplus::Image **image)
{
    HRSRC hResource = ::FindResource(hInst, MAKEINTRESOURCE(res), pType);
    if (!hResource){
        return false;
    }

    DWORD imageSize = ::SizeofResource(hInst, hResource);
    if (!imageSize)
        return false;
    const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
    if (!pResourceData)
        return false;
    HGLOBAL hBuffer  = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
    if (hBuffer)
    {
        void* pBuffer = ::GlobalLock(hBuffer);
        if (pBuffer)
        {
            CopyMemory(pBuffer, pResourceData, imageSize);
            IStream* pStream = NULL;
            if (::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) == S_OK)
            {
                *image = Gdiplus::Image::FromStream(pStream);
            }
            ::GlobalUnlock(hBuffer);
        }
        ::GlobalFree(hBuffer);
        hBuffer = NULL;
    }
    UnlockResource(LoadResource(hInst, hResource));
    return (*image)!=NULL;
}




--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ASMatic
Дата 23.6.2009, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



СПАСИБО! но кажется мне что действительно не правельно гружу в ресурсы(( - мож лучше в длл както подгрузить бмп и оттуда уже в память? - ну не знаю что уже думать....
после *image = Gdiplus::Image::FromStream(pStream); - в самом image  -00000000000

сделал ктрлС-ктрлВ функции и вызвал её:

PBITMAP bmp = new BITMAP;

LoadImageFromResource( 102, RT_BITMAP, hInstance, (Image**) &bmp);

-или чёт не правильно?? 
PM MAIL   Вверх
Andrey44
Дата 23.6.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Код

Gdiplus::Image* img;
LoadImageFromResource( 102, _T("BITMAP"), hInstance,  &img);



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ASMatic
Дата 23.6.2009, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



извеняюсь я за тупость но тепрь оно даже в ресурсах не находит

HRSRC hResource = ::FindResource(hInst, MAKEINTRESOURCE(res), pType);

возвращает 0( -жаль - что мало опыта,но прошу помочь мне понять все +)
hInst - норм
res - 0х00000066
pType - BITMAP
PM MAIL   Вверх
Andrey44
Дата 23.6.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



ASMatic, у вас проектик большой?
Можете выложить?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ASMatic
Дата 23.6.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



не вопрос - спасиб!!!
проектик пустой мона сказать. 2.7Мб и так долго сюда лился что решил на обменник залить:

http://www.sendspace.com/file/bh1vct
PM MAIL   Вверх
Andrey44
Дата 23.6.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



А где там ссылка на скачивание?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ASMatic
Дата 23.6.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



снизу большими буковками DOWNLOAD)
на всякий там ливанул еще на рапиду....

http://rapidshare.com/files/247636172/temp.rar.html
PM MAIL   Вверх
Andrey44
Дата 23.6.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



ASMatic, извини что задержался с твоим проектиком. Работа понимаешь smile 
Вот держи твой проект
Увидишь, я написал 
Код

Image* LoadResources( HINSTANCE hInstance, LPSTR Name )
{

    Gdiplus::Image* img;
    return LoadImageFromResource( IDB_PNG_TEST, _T("PNG") , hInstance, &img);
}

По-аналогии сделаешь 
    IDB_BITMAP_TEST, _T("BITMAP")
    IDB_JPG_TEST, _T("JPG")
Все работает.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ASMatic
Дата 23.6.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



спасибки!!! ничего страшного - я тож не дождался и вырубился)
-ну чё могу сказать - с меня +,только пока я маленький)) - надо постить,постить. Думаю что скоро все изменится...
 smile 

мдааа - проанализировал - и так оно всегда,шаг в сторону и не работать smile 
еще раз спасибо!!! оч благодарен - все прекрасно работает!!! smile 

Это сообщение отредактировал(а) ASMatic - 23.6.2009, 17:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0682 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.