Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.17;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.021 c
3-55990
SZap
2002-09-25 12:59
2002.10.17
Поиск компонент...


14-56311
Kordel
2002-09-22 15:44
2002.10.17
Кодировки в Аське под W2k


1-56182
denisww
2002-10-07 15:16
2002.10.17
я создаю поток


1-56053
alexj
2002-10-07 23:29
2002.10.17
Быстродействие StringGridа


3-55939
delfist
2002-09-24 14:09
2002.10.17
А можно ли сразу получить сумму по колонке цифр в таблице?