kvv's home

Форма входа

Категории раздела

Лекции [14]
Разное [4]
Статьи на тему WM, не попавшие в лекции по разным причинам.

Поиск

Каталог статей

Главная » Статьи » Программирование под Windows Mobile » Разное

IImage и ресурсы
Данная статья является логическим продолжением статьи Background Image - картинка в фоне окна.

Нам известны два способа загрузки изображений из ресурсов:


  • С помощью LoadBitmap(LoadImage) можно загрузить файлы типа bmp
  • С помощью SHLoadImageResource можно загрузить файлы типов bmp,jpg,png,gif

оба эти способа не лишены недостатков. LoadBitmap умеет загружать только bmp формат, SHLoadImageResource достаточно медленная функция и требует наличия shell, т.е. не работает на чистой WinCE.

Но кроме этих двух способов мы можем воспользоваться интерфейсом IImagingFactory.
В общем виде задача загрузки изображения сводится к получению данных ресурса.
Допустим, наш ресурс описан так, как это используется для функции SHLoadImageResource

Code

IDB_IMAGE GIF DISCARDABLE "image.png"

Шаг 1. Создаем экземпляр фабрики классов

Code

IImagingFactory* pFactory = NULL;  
IImage * pImage = NULL;
...

CoInitializeEx(0, COINIT_MULTITHREADED);
CoCreateInstance(CLSID_ImagingFactory, 0, CLSCTX_INPROC_SERVER,
  __uuidof(IImagingFactory) , (void**)&pFactory);

Шаг 2. Получаем указатель на данные ресурса и создаем объект IImage

Code

  if (pFactory)
  {
   
  HMODULE hInst = (HMODULE)GetModuleHandle(NULL);
  HRSRC hRsrc = FindResource(hInst,MAKEINTRESOURCE(IDB_IMAGE),L"GIF");
  if (hRsrc)
  {
  DWORD dwSize = SizeofResource(hInst,hRsrc);
  HGLOBAL hRes = LoadResource(hInst,hRsrc);
  if (hRes)
  {
  LPVOID ptr = LockResource(hRes);
  if (ptr)
  pFactory->CreateImageFromBuffer(ptr, dwSize, BufferDisposalFlagNone, &pImage);
  }
  }
  }

Шаг 3. Рисуем

Code

  if (pImage)
  {
  pImage->Draw(hDC,&r,NULL);
  }

4. Освобождаем ресурсы

Code

  if (pImage)
  pImage->Release();
  if (pFactory)
  {
  pFactory->Release();
  }
  CoUninitialize();

Вот в общем-то и все.

Категория: Разное | Добавил: kvv (07.12.2009)
Просмотров: 3046 | Комментарии: 2 | Теги: IImage, GDI+ | Рейтинг: 0.0/0
Всего комментариев: 1
1 Abeer  
0
These pieces really set a standard in the indsutry.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Друзья сайта

  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Облако тэгов