Вниз
Скачать: CL | DM;

Заполнить структуру BITMAPFILEHEADER   Найти похожие ветки 

 
SPeller ©   (2002-09-04 10:39) [0]

Всем доброго времени суток! Как правильно вычислить значение поля bfOffBits структуры BITMAPFILEHEADER, имея заполненную структуру BITMAPINFO и следующие за ней графические данные ??

Вот текстт процедуры в которой что-то не так делается. Знаю что не могу правильно прикрутить BITMAPFILEHEADER.

procedure TForm1.Button1Click(Sender: PObj);
var hFile, hBl, hRes, rSize, tm: cardinal; pf: pointer; bfh: TBITMAPFILEHEADER;
bih: PBITMAPINFOHEADER;
begin
hbl:=FindResource(hInstance, "FRMMAIN_IMAGELIST1", RT_BITMAP );
if hbl=0 then begin
ShowMessage("Can""""t find resource.");
exit;
end;
rSize:=SizeOfResource(hInstance, hbl);
hRes:=LoadResource(hInstance, hbl);
if hRes=0 then begin
ShowMessage("Can""""t load resource");
exit;
end;
pf:=LockResource(hres);
hfile:=CreateFile("C:\tmres.bmp", GENERIC_WRITE or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);
bih:=pf;
bfh.bfType:=$424D;
bfh.bfSize:=rSize+SizeOf(bfh);
bfh.bfReserved1:=0;
bfh.bfReserved2:=0;

if bih.biBitCount > 8 then tm:=0 else tm:=round(exp(bih.biBitCount*ln(2)))*SizeOf(RGBQUAD);
bfh.bfOffBits:=SizeOf(bfh) + SizeOf(bih^)+ tm -1;

tm:=0;
_WriteFile(hFile, @bfh, SizeOf(bfh), tm, 0);

hbl:=Cardinal(_WriteFile(hFile, pf, rsize, tm, 0));
if hbl=0 then ShowMessage("Writing failed");
CloseHandle(hFile);
FreeResource(hRes);

end;


 
SPeller ©   (2002-09-04 11:23) [1]

ЗЫ: Объявление _WriteFile такое:

function _WriteFile(hFile: cardinal; Buffer:pointer; BytesToWrite: cardinal; var BytesWritten: cardinal; lpOverlapped: cardinal): BOOL; stdcall;external kernel32 name "WriteFile";


 
Игорь Шевченко ©   (2002-09-04 11:36) [2]

graphics.pas - TBitmap.WriteStream - может, натолкнет на какие-то идеи ?


 
Tihas ©   (2002-09-04 19:49) [3]

Ну зачем ты всё измеряешь SizeOf. Думаю ты знаешь, что
размер заголовка в любом битмепе весит 54 байта, типер
остоёться вычислить размер палитры,
Если case bfOffBits of
1:s:=2;
4:s:=16;
8:s:=256;
16,24,32:s:=0;
end;
result:=4*s+54;
Вот и всё.
Удачи.



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
3-55997
maxim2
2002-09-26 12:37
2002.10.17
Как использовать функцию SQL Sum


3-55981
Солер
2002-09-25 13:21
2002.10.17
Не выполняется SQL запрос


1-56151
Zuvom
2002-10-06 14:30
2002.10.17
Файлы данных


3-55965
vis79
2002-09-24 08:28
2002.10.17
Неверно выполняется запрос SQL для поля Time


3-55929
Юра
2002-09-04 18:37
2002.10.17
Фильтрация с подчиненными таблицами




   Наверх