Главная страница
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.011 c
1-56111
ShurikNV
2002-10-09 10:31
2002.10.17
РАЗМЕР ОКНА


1-56176
Ш-К
2002-10-07 03:35
2002.10.17
Использование общих данных между процессами.


3-55976
Not Register
2002-09-24 12:47
2002.10.17
Вопрос по гриду ExpressQuantumGrid


4-56421
Didopor
2002-09-02 19:40
2002.10.17
все Handle-лы нитей.


1-56212
Andy BitOff
2002-10-07 20:31
2002.10.17
Клавиатура