Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Платформы Windows Mobile и Windows Embedded > LoadImage


Автор: nikav 27.10.2009, 17:39
   Здравствуйте! Начал программировать под Windows Mobile на MS Visual C++ 2008. Использую при этом WinAPI.
Вот столкнулся с такой проблемой. Используя функцию LoadImage, для загрузки изображения из файла, в последнем параметре необходимо указать LR_LOADFROMFILE, а такого значения, почему то нет, есть только LR_DEFAULTCOLOR и всё. Подскажите, как быть? Как все-таки загрузить изображение?

Автор: Alexeis 27.10.2009, 17:58
  Боюсь что _wfopen / fread , достаем заголовки, затем растр, после чего вызываешь CreateBitmap. 

Автор: nikav 27.10.2009, 22:18
Извини, а по подробней можно. Желательно с примером. И что, получается в WM загрузка через LoadImage вообще не предусмотрена?

Автор: Alexeis 27.10.2009, 22:36
Цитата(nikav @  27.10.2009,  21:18 Найти цитируемый пост)
И что, получается в WM загрузка через LoadImage вообще не предусмотрена? 

  В WinCE упрощенный API, кой чего там нет. На счет примеров думаю следует воспользоваться поиском. Например http://forum.vingrad.ru/forum/topic-174071/kw-bmp/hl/createbitmap/index.html
http://forum.vingrad.ru/forum/topic-152088/kw-bmp-winapi/view-all/hl/createbitmap/index.html

Автор: nikav 27.10.2009, 22:47
Спасибо  smile , буду разбираться.

Автор: t_rex 31.10.2009, 00:31
Не учи людей плохому smile
Вон есть отличная штука - Imaging API.
http://msdn.microsoft.com/en-us/library/aa913240.aspx
и работает побыстрее GDI.
В блоге Native Mobile (погугли адрес) есть отличные примеры как раз с этим.

Автор: Alexeis 31.10.2009, 01:01
Любопытно. На всякий случай скопипастю сюда пример.
Код

//Static handles for image cache
static HDC hDCI = NULL;
static HBITMAP hImage = NULL;
static RECT rcImage = {0, 0, LINKS_WIDTH, LINKS_HEIGHT};

//Function to load png a place it into DC containing 32-bit DIB
void InitializeImage()
{
IImagingFactory *pFactory = NULL;
IImage *pImage = NULL;
BITMAPINFO bInfo;

if(CoCreateInstance(CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void**)&pFactory) == S_OK)
{
if(pFactory->CreateImageFromFile(L"\\Program Files\\OzzY\\Links.png", &pImage) == S_OK)
{
ZeroMemory(&bInfo.bmiColors, 4);
bInfo.bmiHeader.biClrImportant = bInfo.bmiHeader.biClrUsed = 0;
bInfo.bmiHeader.biBitCount = 32;
bInfo.bmiHeader.biCompression = BI_RGB;
bInfo.bmiHeader.biXPelsPerMeter = bInfo.bmiHeader.biYPelsPerMeter = 3780;
bInfo.bmiHeader.biSizeImage = 0;
bInfo.bmiHeader.biHeight = LINKS_HEIGHT;
bInfo.bmiHeader.biWidth = LINKS_WIDTH;
bInfo.bmiHeader.biPlanes = 1;
bInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

hDCI = CreateCompatibleDC(NULL);
hImage = CreateDIBSection(hDCI, &bInfo, DIB_RGB_COLORS, NULL, NULL, NULL);
SelectObject(hDCI, hImage);
pImage->Draw(hDCI, &rcImage, NULL);
pImage->Release();
}
pFactory->Release();
}
}

//The way I do the painting, on today screen
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hwnd, &ps);
BLENDFUNCTION bfAlpha = {AC_SRC_OVER, 0, 0xFF, AC_SRC_ALPHA};

SetBkMode(hDC, TRANSPARENT);
AlphaBlend(hDC, 0, 0, LINKS_WIDTH, LINKS_HEIGHT, hDCI, 0, 0, LINKS_WIDTH, LINKS_HEIGHT, bfAlpha);
EndPaint(hwnd, &ps);


Добавлено через 2 минуты и 26 секунд
Цитата(t_rex @  30.10.2009,  23:31 Найти цитируемый пост)
и работает побыстрее GDI.

  В чем именно? В выводе текста? Или в рисовании толстых линий?

Автор: t_rex 31.10.2009, 19:39
Цитата

В чем именно? В выводе текста? Или в рисовании толстых линий? 

В выводе изображений. У IImage метод Draw()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)