Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

Загрузка и отображение картинки   Найти похожие ветки 

 
Варяг ©   (2006-05-30 21:20) [0]

как правильно загрузить картинку из ВМР файла или ресурса?
привожу свой код моэет кто знает в чем неправильный подход..


function CreateImg:LongInt;
begin

Result:=CreateWindow(
   "STATIC",
   nil,
   WS_VISIBLE or WS_CHILD or WS_BORDER or SS_BITMAP
   ,  // styles

   250, // x
   100, // y
   100,//Width,
   100,//Height
   MyWnd,
   Id_Btn1,
   (HINSTANCE) ,
   nil);

If Result=0 then
MessageBox(0,"Error of controls","",0);
Img:=result;
end;

....

img:= LoadBitMap(hInstance,"BITMAP")"Error",nil,0); -для ресурса
...
Img:=LoadImage(hInstance,PChar("c:\pic1.bmp"),IMAGE_BITMAP,
150,150,LR_DEFAULTSIZE ); -для ВМР

подозреваю что неверно выбран объект для отображени..



 
Delphi_is_cool ©   (2006-05-31 20:21) [1]


> Варяг ©   (30.05.06 21:20)
> как правильно загрузить картинку из ВМР файла или ресурса?

По поводу ресурсов, если тип ресурса BITMAP, то стандартными ф-циями(LoadBitmap, LoadImage), а если ты загнал bmp в ресурс в виде RCDATA, то смотри здесь: http://delphimaster.net/view/4-1148709908/

Что касается загрузки из файла ... помоему придётся грузить вручную:

type
 PBitmap_Info = ^TBitmap_Info;
 TBitmap_Info = record
   Width: LongInt;
   Height: LongInt;
 end;

function LoadBitmapFromFile(const FileName: String; lpBitmap_Info: PBitmap_Info) : HBITMAP;
var
 pMem: Pointer;
 DC, MemDC: HDC;
 dwFileSize: LongWord;
 BitmapInfo: TBitmapInfo;
 hFile, hBmp: LongWord;
begin
 Result := 0;
 hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 if hFile <> INVALID_HANDLE_VALUE then
 begin
   dwFileSize := GetFileSize(hFile, nil) - SizeOf(TBitmapFileHeader);
   SetFilePointer(hFile, SizeOf(TBitmapFileHeader), nil, 0);

   pMem := Pointer(LocalAlloc(LPTR, dwFileSize));
   if pMem <> nil then
   begin
     if ReadFile(hFile, pMem^, dwFileSize, dwFileSize, nil) then
     begin
       DC := GetDC(0);
       if DC <> 0 then
       begin
         MemDC := CreateCompatibleDC(DC);
         if MemDC <> 0 then
         begin
           ZeroMemory(@BitmapInfo, SizeOf(TBitmapInfo));
           CopyMemory(@BitmapInfo.bmiHeader, pMem, SizeOf(TBitmapInfoHeader));

           if lpBitmap_Info <> nil then
             with lpBitmap_Info^, BitmapInfo.bmiHeader do
             begin
               Width := biWidth;
               Height := biHeight;
             end;

           hBmp := SelectObject(MemDC, CreateCompatibleBitmap(DC, 1, 1));
           Result := CreateDIBitmap(MemDC, BitmapInfo.bmiHeader, CBM_INIT, Pointer(LongWord(pMem) + SizeOf(TBitmapInfoHeader)), BitmapInfo, DIB_RGB_COLORS);

           DeleteObject(SelectObject(MemDC, hBmp));
           DeleteDC(MemDC);
         end;
         ReleaseDC(0, DC);
       end;
     end;
     LocalFree(LongWord(pMem));
   end;
 end;
 CloseHandle(hFile);
end;

// Пример использования:

function CreateImage(const ParentHWnd: HWND; const X, Y, Width, Height: LongInt) : HWND;
begin
 Result := CreateWindow("Static", nil, WS_CHILD or WS_VISIBLE or WS_BORDER or SS_BITMAP or SS_CENTERIMAGE, X, Y, Width, Height, ParentHWnd, 0, hInstance, nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 hBmp: HBITMAP;
 hImage: HWND;
 Bitmap_Info: TBitmap_Info;
begin
 hBmp := LoadBitmapFromFile("C:\1.bmp", @Bitmap_Info);
 hImage := CreateImage(Handle, 50, 50, Bitmap_Info.Width, Bitmap_Info.Height);
 SendMessage(hImage, STM_SETIMAGE, IMAGE_BITMAP, hBmp);
end;


 
Варяг ©   (2006-06-01 23:05) [2]

спасибо за ответ Delphi_is_cool
а то я уже надежду начал терять...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.045 c
15-1159108905
Проггер из библиотеки
2006-09-24 18:41
2006.10.15
Информация о мониторе Samtron 76 BDF


2-1159361585
Alex_C
2006-09-27 16:53
2006.10.15
Как узнать 1 и последнюю видимую строку в Memo?


11-1135681340
Flea
2005-12-27 14:02
2006.10.15
KOLGets ?


2-1158926772
did_elena
2006-09-22 16:06
2006.10.15
вычисление даты


10-1124710934
KA_
2005-08-22 15:42
2006.10.15
Не могу выделить страницу в Word е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский