Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

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

 
Варяг ©   (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 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.048 c
2-1159520821
Term
2006-09-29 13:07
2006.10.15
Может туплю


15-1159192046
XeLL
2006-09-25 17:47
2006.10.15
ряд Макларена


15-1158991802
KilkennyCat
2006-09-23 10:10
2006.10.15
Smileики


2-1159637385
waaw
2006-09-30 21:29
2006.10.15
{$INCLUDE ...


11-1132744014
igi
2005-11-23 14:06
2006.10.15
VMHSyntaxEdit как юзать?