Главная страница
    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.04 c
8-1142814706
Петр
2006-03-20 03:31
2006.10.15
Анимация - Графика


15-1159277801
syte_ser78
2006-09-26 17:36
2006.10.15
доступ к сетевой папке


2-1159685512
Roeg
2006-10-01 10:51
2006.10.15
Как вывести чужое окно на передний план?


1-1157210797
Ragazor
2006-09-02 19:26
2006.10.15
Как передать из dll хранящиеся там frame-ы?


1-1157484310
Sergioni
2006-09-05 23:25
2006.10.15
TwebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский