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

Вниз

Работа с битмапами   Найти похожие ветки 

 
den   (2003-05-18 12:51) [0]

Здравствуйте.
Подскажите пож., как при помощи только лишь функций API можно вывести растр из файла на канву формы.


 
e!dGe. ©   (2003-05-18 13:03) [1]

Прямо так - растр из файла - никак.


 
Dmk ©   (2003-05-18 14:27) [2]

Сначала надо создать Bitmap
CreateDIBSection()
CreateBitmap()
и т.д.
Потом считать файл или часть файла в
память этого Bitmap"а.
Ну и наконец с помощью BitBlt или SetDIBits
вывести на контекст формы.


 
Ich Hasse ©   (2003-05-18 18:13) [3]

function LoadBMP(const hWindow: THandle; FileName : String):HBitMap;
var
F : File;
BitmapFileHeader : TBITMAPFILEHEADER;
BitmapInfoHeader : TBITMAPINFOHEADER;
BitmapInfo : TBitMapInfo;
BitmapBits : Pointer;
ReadCount : DWORD;
DC : HDC;
begin
AssignFile(F, FileName);
Reset(F, 1);

BlockRead(F, BitmapFileHeader, SizeOf(TBitmapFileHeader), ReadCount);

if (ReadCount <> SizeOf(TBitmapFileHeader)) then
begin
MessageBox(hWindow, "Ошибка чтения BITMAPFILEHEADER.", "DIB From File Sample", MB_OK+MB_ICONERROR);
CloseFile(F);
Result:=0;
Exit;
end;

BlockRead(F, BitmapInfoHeader, SizeOf(TBitmapInfoHeader), ReadCount);

if (ReadCount <> SizeOf(TBitmapInfoHeader)) then
begin
MessageBox(hWindow, "Ошибка чтения TBITMAPINFOHEADER.", "DIB From File Sample", MB_OK+MB_ICONERROR);
CloseFile(F);
Result:=0;
Exit;
end;

GetMem(BitmapBits, BitmapInfoHeader.biSizeImage);

BlockRead(F, BitmapBits^, BitmapInfoHeader.biSizeImage, ReadCount);

if (ReadCount <> BitmapInfoHeader.biSizeImage) then
begin
MessageBox(hWindow, "Ошибка чтения данных файла", "DIB From File Sample", MB_OK+MB_ICONERROR);
CloseFile(F);
Result:=0;
Exit;
end;

BitmapInfo.bmiHeader:=BitmapInfoHeader;

DC:=GetDC(hWindow);
Result:=CreateDIBitmap(DC,
BitmapInfoHeader,
CBM_INIT,
BitmapBits,
BitmapInfo,
DIB_RGB_COLORS);
ReleaseDC(hWindow, DC);

if Result=0 then
MessageBox(hWindow, "Ошибка создания растра.", "DIB From File Sample", MB_OK+MB_ICONERROR);
CloseFile(F);
end;


Вот таким образом ты грузишь *.bmp файл в HBitMap.
Далле выводишь с помощью BitBlt какого-нибудь...


 
Morfein ©   (2003-05-18 22:00) [4]

А зачем так извращаться, если вывод предполагается на Canvas формы? С помощью её же методов и грузи.


 
e!dGe. ©   (2003-05-18 22:23) [5]


> Morfein © (18.05.03 22:00)

Однако..)


 
Ich Hasse ©   (2003-05-18 22:42) [6]

2 Morfein
Мне кажется или это и в правду форум WinAPI?
Если это так, то я ответил на вопрос с точки зрения API и никаких извращений


 
Mischka ©   (2003-05-19 06:50) [7]

А мне вот так насоветовали. Работает замечательно!
Ну, конечно, без проверки корректности .bmp-файла :)

Window: HWND;

WindowFace:=loadImage(0, PANSIChar("MainForm.bmp"), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE or LR_LOADFROMFILE);

procedure drawFace();
var
bm: BITMAP;
hob: HBITMAP;
rc: TRect;
DC, bDC: HDC;
begin
getObject(WindowFace, sizeOf(BITMAP), LPSTR(@bm));
getClientRect(Window, rc);
DC:=getDC(Window);
bDC:=createCompatibleDC(DC);
hob:=HBITMAP(selectObject(bDC, WindowFace));
BitBlt(DC, rc.Left, rc.Top, bm.bmWidth, bm.bmHeight, bDC, 0, 0, SRCCOPY);
selectObject(bDC, hob);
deleteDC(bDC)
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
1-67785
paul_k
2003-07-09 10:58
2003.07.21
Как обратится к свойствам компонентя по его имени


14-68064
SergP
2003-07-06 00:11
2003.07.21
Посоветуйте алгоритм для криптования строки


3-67714
Sliften
2003-06-25 22:34
2003.07.21
можно ли прграмно дабовлят в таблицу новые колонки


6-67947
paul_77
2003-05-15 17:51
2003.07.21
передача файла из html на сервер


3-67667
Stas
2003-06-26 12:21
2003.07.21
Хранимая процедура и Windows