[РЕШЕНО]WINCE Загрузка bitmap через API

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[РЕШЕНО]WINCE Загрузка bitmap через API

Сообщение alex208210 » 06.05.2017 00:38:17

Добрый день. Возможно кто то сталкивался с проблемой загрузки bmp картинок средствами api в WINCE 6.0. Хотелось бы знать способы решения если таковые имеются.

API Функция загрузки bmp для ББ: Loadimage. Проблема в том что она не работает в WINCE. Почитав форумы, пишут что вместо Loadimage под WINCE нужно использовать SHLoadDIBitmap. Но и эта функция не дает результата.

Вот пример загрузки и отрисовки картинок в wince и ББ

Код для WINCE
Код: Выделить всё
uses windows;

function SHLoadDIBitmap(_para2:LPCTSTR):HBITMAP; external KernelDLL name 'SHLoadDIBitmap';

procedure TForm1.Button1Click(Sender: TObject);
var
  b:graphics.tbitmap;
  hbtm:hbitmap;
  hmdc,main:hdc;

begin 
   hbtm:=SHLoadDIBitmap(pwidechar('1.bmp'));    {загружаем картинку}

   Main := GetDC(Handle);                                   {дескриптор дисплейного контекста из дескриптора формы}

   hmdc:= CreateCompatibleDC(Main);                 {Создаётм совместимый с оконным контекст памяти}

   SelectObject(hmdc, hbtm);                             {Выбираем объект картинку}

   GetObject(hbtm, sizeof(b), @b);                     {Получаем высоту и ширину картинки}

   BitBlt(Main,0,0,100,100,hmdc,0,0,SRCCOPY); {Рисуем картинку на форме}

   DeleteDC(hmdc);                                           {Прибираемся}
   DeleteObject(hbtm);

end;



Код для ББ
Код: Выделить всё
uses windows;

procedure TForm1.Button2Click(Sender: TObject);
var
  b:graphics.tbitmap;
  hbtm:hbitmap;
  hmdc,main:hdc;
begin
   hbtm:=LoadImage(GetModuleHandle(Nil), pchar('1.bmp'), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);    {загружаем картинку}

   Main := GetDC(Handle);                                   {дескриптор дисплейного контекста из дескриптора формы}

   hmdc:= CreateCompatibleDC(Main);                 {Создаётм совместимый с оконным контекст памяти}

   SelectObject(hmdc, hbtm);                             {Выбираем объект картинку}

   GetObject(hbtm, sizeof(b), @b);                     {Получаем высоту и ширину картинки}

   BitBlt(Main,0,0,100,100,hmdc,0,0,SRCCOPY); {Рисуем картинку на форме}

   DeleteDC(hmdc);                                           {Прибираемся}
   DeleteObject(hbtm);
end;


С ББ все впорядке, а вот код для WINCE не работает. В чем может быть проблема?
Последний раз редактировалось alex208210 06.05.2017 19:19:39, всего редактировалось 1 раз.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: WINCE Загрузка bitmap через API

Сообщение MysticCoder » 06.05.2017 18:17:43

WinCE в глаза не видел, но в виндах вроде есть функция GetLastError, которая возвращает код последней ошибки, его можно преобразовать в текстовое сообщение через FormatMessage. На крайняк можно вручную грузить, читать ширину, высоту, смещение данных в файле и читать. Только придется еще и самому диб секции создавать.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: WINCE Загрузка bitmap через API

Сообщение alex208210 » 06.05.2017 18:48:28

Getlasterror выдает ошибку 2. Не найден файл. Но файл лежит в каталоге с программой, и путь до него указан правильно.


P.S . Проблема решена! Спасибо за подсказку. :)

Код: Выделить всё
  wstr:widestring;

begin
   wstr:=ExtractFileDir(Application.ExeName)+'\1.bmp';
   hbtm:=SHLoadDIBitmap(pwidechar(wstr));    {загружаем картинку}   
Последний раз редактировалось alex208210 06.05.2017 19:19:23, всего редактировалось 1 раз.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: WINCE Загрузка bitmap через API

Сообщение vitaly_l » 06.05.2017 19:18:21

alex208210 писал(а):Getlasterror выдает ошибку 2. Не найден файл. Но файл лежит в каталоге с программой, и путь до него указан правильно.

1) Вот здесь почитайте: viewtopic.php?t=24720&view=unread#unread
2) если не поможет №1, то попробуйте указать полный путь.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: [РЕШЕНО]WINCE Загрузка bitmap через API

Сообщение alex208210 » 06.05.2017 19:20:47

vitaly_l писал(а):2) если не поможет №1, то попробуйте указать полный путь.

именно это и подсказало решение проблемы, спасибо.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru